【问题标题】:OnPaint Invokes itself when mousing over buttonsOnPaint 鼠标悬停在按钮上时调用自身
【发布时间】:2018-05-14 02:20:48
【问题描述】:

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

首先我想解释一下,我是一名业余程序员,没有人可以寻求帮助。我只能阅读我在互联网上购买的书籍和指南,所以如果这个问题非常愚蠢,我很抱歉。

案例:我有一个“Windows 窗体应用程序”,窗体本身大小为 500x500,其中我有一个“图片框”(大小 400x400,loc 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);
            }
    }
}

对于那些想知道它做什么的人来说,它只是用不同颜色和不透明度的圆圈填充图片框。编辑:它不会立即填充,它应该看起来“漂亮”。

提前致谢!

【问题讨论】:

  • 在需要绘制控件时调用OnPaint 事件。所以向它添加东西,移动它们等等。正如你所说,即使将鼠标移到它上面也意味着需要重绘控件。
  • 如果目标是在图片框中设置一次圆圈并且不改变它们,那么从表单的 Load 事件中执行此操作。
  • @SamAxe 目标是连续绘制圆圈,也许我误解了应该如何使用 Graphics?我想到的是一个小动画。
  • @DavidG 我明白了。这解释了很多。如何制作单独的 OnPaint?
  • 与什么分开?

标签: c# windows-forms-designer onpaint


【解决方案1】:

你可以set the form's ControlStyle

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

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

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2018-07-20
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多