一次又一次地使Windows窗体失效

本文关键字:窗体 失效 Windows 一次又一次 | 更新日期: 2023-09-27 17:50:03

我使用此代码来绘制一些圆圈,但它不断重绘和重绘,并停止与错误,textBox1。文本有不好的数字格式,即使我尝试5或6。这有什么不对吗?

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace terc
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }



        void Button1Click(object sender, EventArgs e)
        {
            this.Paint += new PaintEventHandler(KresliTerc);
        }
        protected void KresliTerc(object sender,PaintEventArgs e)
        {
            Graphics grfx = e.Graphics;
            int pocet = int.Parse(textBox1.Text);
            label1.Text = pocet.ToString();
            for(int i=1; i <= pocet; i++)
            {
                grfx.FillEllipse(Brushes.Black,ClientSize.Width/2,ClientSize.Height/2,50*i,50*i);
                Invalidate();
            }
        }
    }
}

一次又一次地使Windows窗体失效

为什么每次单击按钮时都附加事件处理程序?这意味着您将拥有与按钮点击一样多的事件处理程序,我怀疑这是您想要的。

然而,您的重绘问题可能是您在Paint事件处理程序中调用Invalidate的事实。这将强制重新绘制表单。所以每次你绘制,你都会触发一个新的绘制,它会触发一个新的绘制,以此类推

你不应该在Paint调用中失效。

根据一些整数或布尔值处理绘画。在单击事件中设置整数或布尔值,并在按钮单击处理程序中调用Invalidate。

 this.Paint += new PaintEventHandler(KresliTerc);

你在哪里调用这个,因为它是一个绘制事件,它会在绘制发生时反复调用

       Boolean isButtonClicked;
        protected override void OnPaint(PaintEventArgs e)
        {
            if (this.isButtonClicked)
            {
                this.isButtonClicked = false;
                // some paint logic goes down here...
                e.Graphics.FillEllipse(Brushes.YellowGreen, 12, 12, 54, 54);
            }
        }
        private void HandleOnButtonClick(Object sender, EventArgs e)
        {
            this.isButtonClicked = true;
            this.Invalidate();
        }