C# 当鼠标悬停在按钮上时,OnPaint会自动调用
编辑:我已经尝试解决这个问题一个多星期了,我也在这里和其他地方搜索过 我想首先解释一下,我是一个业余程序员,没有人需要帮助。我只能读我在网上买的书和指南,所以如果这个问题超出愚蠢的范围,我很抱歉 案例:我有一个“Windows窗体应用程序”,窗体本身大小为500x500,其中有一个“图片框”(大小为400x400,位置为0,0) 我知道Thread.Sleep会挂起接口,因为它不是多线程的 我遇到的问题是启动程序时会调用“OnPaint”。 如果我添加一个按钮(从工具箱中拖动),那么“OnPaint”将被调用两次,以此类推,最多可确认4个按钮。然而,这并不是最糟糕的部分。只需将鼠标移到按钮(任何按钮)上即可调用“OnPaint”。如您所见,“Invalidate()”尚未插入,因为我甚至还不能单击按钮 如何防止这种情况?有什么问题?我应该做些什么不同的事情? 我的意思是,它做我想做的事,而不是在我想做的时候。 代码:C# 当鼠标悬停在按钮上时,OnPaint会自动调用,c#,windows-forms-designer,onpaint,C#,Windows Forms Designer,Onpaint,编辑:我已经尝试解决这个问题一个多星期了,我也在这里和其他地方搜索过 我想首先解释一下,我是一个业余程序员,没有人需要帮助。我只能读我在网上买的书和指南,所以如果这个问题超出愚蠢的范围,我很抱歉 案例:我有一个“Windows窗体应用程序”,窗体本身大小为500x500,其中有一个“图片框”(大小为400x400,位置为0,0) 我知道Thread.Sleep会挂起接口,因为它不是多线程的 我遇到的问题是启动程序时会调用“OnPaint”。 如果我添加一个按钮(从工具箱中拖动),那么“OnPai
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目标是连续绘制圆,也许我误解了图形的使用方式?“我想到的是一个小动画。”大卫,我明白了。这解释了很多。我该如何制作一种颜料,即。。分开?和什么分开?