我在Winforms中创建了一个应用程序,并使用从Panel
扩展的自定义控件,其中包含多行,并且我在表单中有一个按钮。我需要当用户点击按钮时,面板中线条的颜色将会改变。
我使用Invalidate()
方法刷新此面板以查看更改。
private void button1_Click_2(object sender, EventArgs e)
{
if (MyPanel.mycolor2 == Color.Red)
{
MyPanel.mycolor2 = Color.Blue;
}
else
{
MyPanel.mycolor2 = Color.Red;
}
MyPanel.Invalidate();
}
我的应用程序工作正常。但当我点击按钮时,我的形状瞬间消失了。
我尝试了应用程序的发布版本,但我的问题没有解决
- 在面板上启用双缓冲
class MyPanel : Panel
{
public new bool DoubleBuffered
{
get {
return base.DoubleBuffered;
}
set {
base.DoubleBuffered = true;
}
}
public MyPanel() :
base()
{
this.DoubleBuffered = true;
}
}
如果你在面板上有几个子控件,你可能想要调用
SuspendLayout()
和ResumeLayout()
。使用
Refresh()
代替Invalidate()
来立即更新控件真正的原因可能是手工画线。如果你提供代码,人们可以改进它或给出建议。