winforms 如何在C#中不中断地将更改应用于形状?

9rnv2umw  于 2022-11-16  发布在  C#
关注(0)|答案(1)|浏览(78)

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

我的应用程序工作正常。但当我点击按钮,一会儿我的形状消失了。
我尝试发布应用程序版本,但问题未解决

34gzjxbg

34gzjxbg1#

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()
1.请使用Refresh()而非Invalidate()立即更新控件。
1.真实的的原因可能是手工绘制的线条。如果你提供了代码,人们可以改进它或给予建议。

相关问题