如何在c#中不中断地应用更改到形状?



我在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();
}

我的应用程序工作正常。但当我点击按钮时,我的形状瞬间消失了。

我尝试了应用程序的发布版本,但我的问题没有解决

  1. 在面板上启用双缓冲
class MyPanel : Panel
{
public new bool DoubleBuffered
{
get {
return base.DoubleBuffered;
}
set {
base.DoubleBuffered = true;
}
}
public MyPanel() :
base()
{
this.DoubleBuffered = true;
}
}
  1. 如果你在面板上有几个子控件,你可能想要调用SuspendLayout()ResumeLayout()

  2. 使用Refresh()代替Invalidate()来立即更新控件

  3. 真正的原因可能是手工画线。如果你提供代码,人们可以改进它或给出建议。

最新更新