【发布时间】:2011-12-30 05:57:07
【问题描述】:
我现在有一个单一的窗体窗口应用程序,我想在应用程序运行时更改form opacity。意味着当应用程序运行时,它将显示low opacity 表格,并且随着时间的增加,它将显示带有100 opacity 的完整表格。那么如何做到这一点。 (我应该使用定时器控制来控制不透明度,如果是那么如何????)
【问题讨论】:
我现在有一个单一的窗体窗口应用程序,我想在应用程序运行时更改form opacity。意味着当应用程序运行时,它将显示low opacity 表格,并且随着时间的增加,它将显示带有100 opacity 的完整表格。那么如何做到这一点。 (我应该使用定时器控制来控制不透明度,如果是那么如何????)
【问题讨论】:
在表单的构造函数中你可以这样写。
this.Opacity = .1;
timer.Interval = new TimeSpan(0, 0, intervalinminutes);
timer.Tick += ChangeOpacity;
timer.Start();
然后像这样定义一个方法
void ChangeOpacity(object sender, EventArgs e)
{
this.Opacity += .10; //replace.10 with whatever you want
if(this.Opacity == 1)
timer.Stop();
}
【讨论】:
要淡入淡出表格,我通常这样做:
for(double opacity = 0.0; opacity <= 1.0; opacity += 0.2) {
DateTime start = DateTime.Now;
this.Opacity = opacity;
while(DateTime.Now.Subtract(start).TotalMilliseconds <= 30.0) {
Application.DoEvents();
}
}
如果您不经常这样做,这是一个不错的简单解决方案。否则,我建议使用线程。
【讨论】:
FormClosing 事件发生在表单关闭之前,即如果您不取消它,它将关闭。这是因为Application.DoEvents() 处理等待消息,例如关闭表单的消息。所以对于关闭,将e.Cancel设置为true,淡出,然后再次关闭;但请确保在表单中保留一个标志,以免陷入无限循环。
在构造函数中,启动计时器控件,该控件将在每次滴答时调用一个方法。
timer.Interval = 1000;
timer.Tick += new EventHandler(TimerEventProcessor);
timer.Start();
............
private static void TimerEventProcessor(Object myObject,
EventArgs myEventArgs)
{
if(this.Opacity < 1)
this.Opacity += .1;
else
timer.Stop();
}
【讨论】:
退出减少不透明度动画
///////\\\\\\ Coded by Error X Tech ///////\\\\\\
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
private void DecreaseOpacity(object sender, EventArgs e)
{
if (this.Opacity >= 0.1)
{
this.Opacity -= 0.04; //replace 0.04 with whatever you want
}
if (this.Opacity <= 0.0)
timer.Stop();
if (this.Opacity <= 0.1)
{
System.Environment.Exit(1);
Process.GetCurrentProcess().Kill();
}
}
private void Exit_Click(object sender, EventArgs e)
{
timer.Interval = 47; //replace 47 with whatever you want
timer.Tick += DecreaseOpacity;
timer.Start();
}
【讨论】:
在构造函数中,将不透明度设置为 0,并以 10 或 100 毫秒的间隔启动一个计时器。在timer_Tick事件中,你只需要运行this.Opacity += 0.01;
这将使不透明度从 0 开始并每隔几毫秒增加 0.01 直到它为 1(不透明度是双倍的,当它达到 1 的值时它是完全不透明的)
【讨论】:
在应用程序启动时增加不透明度动画
///////\\\\\\ Coded by Error X Tech ///////\\\\\\
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
void IncreaseOpacity(object sender, EventArgs e)
{
if (this.Opacity <= 1) //replace 0.88 with whatever you want
{
this.Opacity += 0.01; //replace 0.01 with whatever you want
}
if (this.Opacity == 1) //replace 0.88 with whatever you want
timer.Stop();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Opacity = .01;
timer.Interval = 10; //replace 10 with whatever you want
timer.Tick += IncreaseOpacity;
timer.Start();
}
【讨论】: