Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当鼠标悬停在按钮上时,OnPaint会自动调用_C#_Windows Forms Designer_Onpaint - Fatal编程技术网

C# 当鼠标悬停在按钮上时,OnPaint会自动调用

C# 当鼠标悬停在按钮上时,OnPaint会自动调用,c#,windows-forms-designer,onpaint,C#,Windows Forms Designer,Onpaint,编辑:我已经尝试解决这个问题一个多星期了,我也在这里和其他地方搜索过 我想首先解释一下,我是一个业余程序员,没有人需要帮助。我只能读我在网上买的书和指南,所以如果这个问题超出愚蠢的范围,我很抱歉 案例:我有一个“Windows窗体应用程序”,窗体本身大小为500x500,其中有一个“图片框”(大小为400x400,位置为0,0) 我知道Thread.Sleep会挂起接口,因为它不是多线程的 我遇到的问题是启动程序时会调用“OnPaint”。 如果我添加一个按钮(从工具箱中拖动),那么“OnPai

编辑:我已经尝试解决这个问题一个多星期了,我也在这里和其他地方搜索过

我想首先解释一下,我是一个业余程序员,没有人需要帮助。我只能读我在网上买的书和指南,所以如果这个问题超出愚蠢的范围,我很抱歉

案例:我有一个“Windows窗体应用程序”,窗体本身大小为500x500,其中有一个“图片框”(大小为400x400,位置为0,0)

我知道Thread.Sleep会挂起接口,因为它不是多线程的

我遇到的问题是启动程序时会调用“OnPaint”。 如果我添加一个按钮(从工具箱中拖动),那么“OnPaint”将被调用两次,以此类推,最多可确认4个按钮。然而,这并不是最糟糕的部分。只需将鼠标移到按钮(任何按钮)上即可调用“OnPaint”。如您所见,“Invalidate()”尚未插入,因为我甚至还不能单击按钮

如何防止这种情况?有什么问题?我应该做些什么不同的事情? 我的意思是,它做我想做的事,而不是在我想做的时候。

代码:

    public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
            int radie = 25;
            Random random = new Random();
            Graphics graphics = pictureBox1.CreateGraphics();
            Color color = Color.Black;
            SolidBrush brush = new SolidBrush(color);

            for (int i = 2500; i > 0; i--)
            {
                color = Color.FromArgb(random.Next(0, 101), random.Next(0, 256), random.Next(0, 256), random.Next(0, 256));
                brush.Color = color;
                graphics.FillEllipse(brush, random.Next(0, 400 - radie * 2), random.Next(0, 400 - radie * 2), radie * 2, radie * 2);
                Thread.Sleep(1);
            }
    }
}
对于那些想知道它做什么的人来说,它只是用不同颜色和不透明度的圆圈填充图片框。编辑:它不是立即填满的,它应该看起来“漂亮”

提前谢谢

你可以

在.ctor或其他适当的启动事件形式中,添加:

this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);

每当需要绘制控件时,都会调用
OnPaint
事件。因此,向其添加内容、移动它们等等。正如您所说,即使将鼠标移到控件上,也意味着需要重新绘制控件。如果目标是在picturebox中设置一次圆,而不改变它们,则从窗体的Load事件中执行该操作。@SamAxe目标是连续绘制圆,也许我误解了图形的使用方式?“我想到的是一个小动画。”大卫,我明白了。这解释了很多。我该如何制作一种颜料,即。。分开?和什么分开?