请大虾指导:
小弟要做一个程序,开始的时候先最小化,然后得到键盘指令后就最大化,这个程序不需要任务栏所有FormBorderStyle设为None:
因此做的时候
1.开始:Form size调为(0,0),位置设为(-100,-100)//隐藏
2.指令:检查Screen大小,把位置调为(0,0),size调整为(ScreenHeight,ScreenWidth)程序都能运行,但是苦恼的是程序每次开始都会闪烁一下,然后才最小化,然后最大化的时候也明显闪烁一下,好像在左上方的位置闪一下才最大化,不知道这个问题怎么解决,多谢。所有size和location的调整,或者隐藏的方法都是写在OnPaint()时间里面,由Refresh()方法促发。
小弟要做一个程序,开始的时候先最小化,然后得到键盘指令后就最大化,这个程序不需要任务栏所有FormBorderStyle设为None:
因此做的时候
1.开始:Form size调为(0,0),位置设为(-100,-100)//隐藏
2.指令:检查Screen大小,把位置调为(0,0),size调整为(ScreenHeight,ScreenWidth)程序都能运行,但是苦恼的是程序每次开始都会闪烁一下,然后才最小化,然后最大化的时候也明显闪烁一下,好像在左上方的位置闪一下才最大化,不知道这个问题怎么解决,多谢。所有size和location的调整,或者隐藏的方法都是写在OnPaint()时间里面,由Refresh()方法促发。
WindowState = FormWindowState.Maximized;
WindowState = FormWindowState.Minimized;
最小化,最大化 不要通过改变Size 来实现
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);最小化时
this.SuspendLayout();
this.WindowState = FormWindowState.Minimized;
this.ResumeLayout(false);最大化时
this.SuspendLayout();
this.WindowState = FormWindowState.Maximized;
this.ResumeLayout(false);
SetStyle(ControlStyles.OptimizedDoubleBuffer| ControlStyles.ResizeRedraw| ControlStyles.AllPaintingInWmPaint, true);
关于DoubleBuffer的优化以前也考虑过,但是如果用了这个参数,以前做的渐变(100MS改变Size一次)动画效果就没有了。
个人感觉这些地方都是很有用的,以后如果大家遇上闪烁的问题可以参考,请指正:
1. DoubleBuffer : SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
2. Size的变化由onsizechange来捕捉,重画可以放Onpaint里面
3. 最大最小化时候可以加上this.SuspendLayout(); this.WindowState = formWindowState.Maximized; this.ResumeLayout(false)。