Поле ввода блокирует систему. Рисование - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь закодировать эту функцию в форме: пользователь нажимает на форму, поле ввода просит пользователя ввести имя, и на месте в форме, где пользователь щелкает, рисуется круг. Одна проблема, с которой я сейчас сталкиваюсь, заключается в том, что круг теперь рисуется в том месте, где отображается поле ввода. У меня на самом деле есть функция перекрасить каждый круг в форме, но она все еще не работает. Вот мой код:

private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        string ProvinceName;
        System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
        System.Drawing.Graphics formGraphics;
        formGraphics = this.CreateGraphics();

        formGraphics.FillEllipse(myBrush, new Rectangle(e.X, e.Y, 10, 10));

        ProvinceName = Microsoft.VisualBasic.Interaction.InputBox("郡名", "", "无名",100,100);

        provinces.Add(new province(ProvinceName, e.X, e.Y));

        listBox1.SelectedIndex = provinces.Count - 1;

        myBrush.Dispose();
        formGraphics.Dispose();
        PaintMap();// This is the function repaint every recorded clicked locations.

    }

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Просто рисования недостаточно. Каждый раз, когда форма перерисовывается, ее нужно будет заново рисовать. Первым шагом было бы переопределить OnPaint

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);

    // paint your circles here, when they need to be persisted 
    // e.Graphics.DrawRectangle(redPen, r);
}

Очевидно, вам нужно будет отслеживать, что нужно рисовать, и когда это больше не нужно рисовать, однако это должно помочь вам начать

0 голосов
/ 19 февраля 2020

Я использовал Bipmap для хранения краски, а затем использовал событие paint для перекраски формы. Проблема решена. Я думаю, когда я непосредственно использую «System.Drawing, я рисую на поле ввода.

...