最近在使用C#时想实现窗口动画从桌面的右下角平滑弹出,照实把自己难了一把,使用简单的Timer控件是可以方便的实现,可是如果窗口是动态生成的在实现时可能会有不必要的开支(还不小呢),其实我们只是想延时一下。不需要重复执行什么东西,因此没有必要使用Timer控件。那就使用Sleep()吧,可是一试验才知道使用Sleep()线程是实现了延时可是动画窗口也没有了。经过一番折腾后发现了原因。
其实我们在使用Sleep()后原本自动放入消息队列中的WinShow和WinRefresh都不见了,没有触发相应的重绘方法。所以没有窗口了。
我用下面的方法实现了,现在拿出来一起分享。
第一次法帖,写的乱其八糟的。不好意思啦……
Screen p;
p = Screen.AllScreens[0];
this.Top = p.WorkingArea.Height - 5;
this.Height = 1;
int i;
for (i=0;i<120;i++)
{
Thread.Sleep(5);
if (this.Height >= 360)
{
}
else
{
this.Left = p.WorkingArea.Width - this.Width;
this.Top = this.Top -3;
this.Height = this.Height + 3;
this.Show();
this.Refresh();
Thread.Sleep(5);
}
}
其实我们在使用Sleep()后原本自动放入消息队列中的WinShow和WinRefresh都不见了,没有触发相应的重绘方法。所以没有窗口了。
我用下面的方法实现了,现在拿出来一起分享。
第一次法帖,写的乱其八糟的。不好意思啦……
Screen p;
p = Screen.AllScreens[0];
this.Top = p.WorkingArea.Height - 5;
this.Height = 1;
int i;
for (i=0;i<120;i++)
{
Thread.Sleep(5);
if (this.Height >= 360)
{
}
else
{
this.Left = p.WorkingArea.Width - this.Width;
this.Top = this.Top -3;
this.Height = this.Height + 3;
this.Show();
this.Refresh();
Thread.Sleep(5);
}
}
解决方案 »
- 改变文本后缀.txt 改成.bat 并执行
- 数据导出到excel
- 存储过程初级问题
- httpwebresponse的问题,请达人帮忙,谢谢。
- 关于图形处理的问题。(有源代码)
- 执行下面代码结果不是自己想的:预想的是生成一个Y20100525000002.DBF;结果生成的是Y2010052.DBF!
- 关于在DataGrid中新加行,将值写回到后台表的问题。急!!!(高手请进)
- C#如何模拟键盘某个键的长按动作
- windows service中能否使用ActiveX控件
- 来看下,是我受不了了,还是SqlManagements受不了了~~~
- ★一个感觉非常棘手的问题,兄弟们进来看看,秀秀你的功力,给点建设性的意见★
- 关于图片预览显示
MethodInvoker mi = new MethodInvoker( temp.Show );
this.Invoke( mi );