OnPaint Вызывается при наведении мыши на кнопки - PullRequest
0 голосов
/ 13 мая 2018

РЕДАКТИРОВАТЬ: я пытался решить эту проблему в течение недели, и я искал здесь и в других местах.

Я хотел бы начать с объяснения, что я программист хобби, и у меня нет никого, чтобыпопросить помощи.Я могу только читать книги, которые я покупаю, и руководства в Интернете, поэтому я прошу прощения, если вопрос выходит за рамки глупости.

Случай: у меня есть «Приложение Windows Form», сама форма имеет размер 500x500 ив нем у меня есть «Picture Box» (размер 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);
            }
    }
}

Для тех, кто интересуется, что он делает, он просто заполняет поле с кружкамиразных цветов и непрозрачности.редактировать: он не заполнен мгновенно, он должен выглядеть "красиво".

Заранее спасибо!

1 Ответ

0 голосов
/ 13 мая 2018

Вы можете установить ControlStyle формы .

В форме .ctor или другого подходящего события запуска добавьте:

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