在WinForm中偶尔会遇到某些特殊效果:比如某个窗口刚开始的时候是完全透明的,随着时间的变化,窗体逐渐不透明,直至完全不透明。这是本文要探讨的窗体效果之一:渐变窗体。
还有一种窗体效果:有些软件在某个特定的时间会显示一个提示窗体,这个窗体不是直接显示的,而是慢慢从窗口的最下方向上移动,直至窗体完全显示就不再移动。当我们点击“确定”按钮之后,窗体由从屏幕上逐渐下移,直至完全从屏幕上完全不显示。这也是本文讨论的窗体效果之一:移动提示信息窗口。
(一)渐变窗体
每个窗体都有一个Opacity属性,它的值从0到1之间,表示窗体的透明效果,0表示完全透明,1表示完全不透明。我们可以动态设置这个值,实现窗体从完全透明到完全不透明。
核心代码如下:
1.using System;
2.
3.using System.Collections.Generic;
4.
5.using System.ComponentModel;
6.
7.using System.Data;
8.
9.using System.Drawing;
10.
11.using System.Text;
12.
13.using System.Windows.Forms;
14.
15.
16.
17.namespace ThreadDemo
18.
19.{
20.
21. /// <summary>
22.
23. /// 说明:这是一个渐变窗口,当程序运行的时候,窗体是完全透明的
24.
25. /// 随着时间的变化,窗体逐渐变为完全部透明
26.
27. /// 作者:周公
28.
29. /// 原创地址:<A 30.href=" http://blog.csdn.net/zhoufoxcn/archive/2008/06/16/231.554064.aspxhttp://blog.csdn.net/zhoufoxcn/archive/2008/06/16/2554064.aspx">http://blog.csdn.net/zhoufoxcn/archive/2008/06/16/231.554064.aspx</A>
30.
31. /// </summary>
32.
33. public partial class TimerForm : Form
34
35. {
36.
37. private double opacity = 0;//记录当前窗体的透明度
38.
39. public TimerForm()
40.
41. {
42.
43. InitializeComponent();
44.
45. Opacity = 0;//指定窗体完全透明
46.
47. }
48.
49.
50.
51. private void timer1_Tick(object sender, EventArgs e)
52.
53. {
54.
55. if (opacity <= 1)
56.
57. {
58.
59. opacity = opacity + 0.05;
60.
61. Opacity = opacity;
62.
63. }
64.
65. Console.WriteLine("Opacity=" + Opacity);
66.
67. }
68.
69. }
70.
71.}
2.
3.using System.Collections.Generic;
4.
5.using System.ComponentModel;
6.
7.using System.Data;
8.
9.using System.Drawing;
10.
11.using System.Text;
12.
13.using System.Windows.Forms;
14.
15.
16.
17.namespace ThreadDemo
18.
19.{
20.
21. /// <summary>
22.
23. /// 说明:这是一个渐变窗口,当程序运行的时候,窗体是完全透明的
24.
25. /// 随着时间的变化,窗体逐渐变为完全部透明
26.
27. /// 作者:周公
28.
29. /// 原创地址:<A 30.href=" http://blog.csdn.net/zhoufoxcn/archive/2008/06/16/231.554064.aspxhttp://blog.csdn.net/zhoufoxcn/archive/2008/06/16/2554064.aspx">http://blog.csdn.net/zhoufoxcn/archive/2008/06/16/231.554064.aspx</A>
30.
31. /// </summary>
32.
33. public partial class TimerForm : Form
34
35. {
36.
37. private double opacity = 0;//记录当前窗体的透明度
38.
39. public TimerForm()
40.
41. {
42.
43. InitializeComponent();
44.
45. Opacity = 0;//指定窗体完全透明
46.
47. }
48.
49.
50.
51. private void timer1_Tick(object sender, EventArgs e)
52.
53. {
54.
55. if (opacity <= 1)
56.
57. {
58.
59. opacity = opacity + 0.05;
60.
61. Opacity = opacity;
62.
63. }
64.
65. Console.WriteLine("Opacity=" + Opacity);
66.
67. }
68.
69. }
70.
71.}
1.(二)移动提示信息窗口
2.每个Control类都有一个Location属性,它是一个Point值,这个值表示控件的左上角的坐标值,利用这个坐标值,我们可以设置窗体的位置。程序核心代码如下:
3.<PRE class=csharp name="code">using System;
4.
5.using System.Collections.Generic;
6.
7.using System.ComponentModel;
8.
9.using System.Data;
10.
11.using System.Drawing;
12.
13.using System.Text;
14.
15.using System.Windows.Forms;
16.
17.
18.
19.1namespace ThreadDemo
20.
21.{
22.
23. /// <summary>
24.
25. /// 说明:这是信息提示窗口,运行程序的时候,这个窗口会缓慢从屏幕下方
26.
27. /// 向上移动,知道提示信息窗口完全显示;
28.
29. /// 当点击“确定”按钮之后,这个窗口又会缓慢从屏幕区域移出
30.
31. /// 作者:周公
32.
33. /// 原创地址:<A href=" http://blog.csdn.net/zhoufoxcn/archive/2008/06/16/2554064.aspxhttp://blog.csdn.net/zhoufoxcn/archive/2008/06/16/2554064.aspx">http://blog.csdn.net/zhoufoxcn/archive/2008/06/16/2554064.aspx</A>
34.
35. /// </summary>
36.
37. public partial class NoteForm : Form
38.
39. {
40.
41. private int screenWidth;//屏幕宽度
42.
43. private int screenHeight;//屏幕高度
44.
45. private bool finished=false;//是否完全显示提示窗口
46.
47. public NoteForm()
48.
49. {
50.
51. InitializeComponent();
52.
53. screenHeight = Screen.PrimaryScreen.Bounds.Height;
54.
55. screenWidth = Screen.PrimaryScreen.Bounds.Width;
56.
57. //设置提示窗口坐标在屏幕可显示区域之外
58.
59. Location = new Point(screenWidth-Width, screenHeight);
60.
61. }
62.
63.
64.
65. private void NoteForm_Load(object sender, EventArgs e)
66.
67. {
68.
69.
70.
71. }
72.
73.
74.
75. private void timer1_Tick(object sender, EventArgs e)
76.
77. {
78.
79. if (!finished)//如果提示窗口没有完全显示
80.
81. {
82.
83. //如果提示窗口的纵坐标与提示窗口的高度之和大于屏幕高度
84.
85. if (Location.Y + Height >= screenHeight)
86.
87. {
88.
89. Location = new Point(Location.X, Location.Y - 5);
90.
91. }
92.
93. }
94.
95. else//如果提示窗口已经完成了显示,并且点击了确定按钮
96.
97. {
98.
99. //如果提示窗口没有完全从屏幕上消失
100.
101. if (Location.Y < screenHeight)
102.
103. {
104.
105. Location = new Point(Location.X, Location.Y + 5);
106.
107. }
108.
109. }
110.
111. }
112.
113.
114.
115. private void btnOK_Click(object sender, EventArgs e)
116.
117. {
118.
119. //设置完成了显示,以便让提示控件移出屏幕可显示区域
120.
121. finished = true;
122.
123. }
124.
125. }
126.
127.}</PRE>
128.<PRE class=csharp name="code"> </PRE>
129.<PRE class=csharp name="code">窗体的运行效果效果:
130.<IMG alt="" src=" http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/TimerForm.JPG"></PRE>
131.<PRE class=csharp name="code"> </PRE>
132.<PRE class=csharp name="code"><IMG alt="" src=" http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/NoteForm1.JPG"></PRE>
133.<PRE class=csharp name="code"> </PRE>
134.<PRE class=csharp name="code"><IMG alt="" src=" http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/NoteForm2.JPG"></PRE>
135.<PRE class=csharp name="code"> </PRE>
136.<PRE class=csharp name="code">说明:整个程序源代码(包括可执行文件)可从<A href=" http://download.csdn.net/zhoufoxcnhttp://download.csdn.net/zhoufoxcn">http://download.csdn.net/zhoufoxcn</A>下载。</PRE>
本文转自周金桥51CTO博客,原文链接: http://blog.51cto.com/zhoufoxcn/165987
,如需转载请自行联系原作者