графика в функции Form.Shown сбрасывается при загрузке formComponent - PullRequest
0 голосов
/ 03 июля 2019

Я хочу нарисовать прямоугольник (используя System.Drawing) при загрузке формы. Поэтому я поместил свой код для рисования в Form.Shown EventHandler. Но прямоугольник не был показан.

Я понял, что если я использую Application.Run (Form) для загрузки формы, он работает правильно. (прямоугольник отображается успешно) Но если я использую Form.ShowDialog (), после события Shown компоненты (например, кнопка) загружаются и графика сбрасывается.

Что мне нужно для рисования моей графики, когда форма загружена без использования Application.Run?

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Threading;

namespace Test
{
    class test : Form
    {
        private Button button1;
        private Graphics graphics;

        public test()
        {
            this.InitializeComponent();
            this.graphics = this.CreateGraphics();
            this.Shown += this.ShownEventHandler;
        }

        private void ShownEventHandler(Object sender, EventArgs e)
        {
            DrawRect();
            Thread.Sleep(2000);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DrawRect();
        }

        internal void DrawRect()
        {
            this.graphics.FillRectangle((Brush)new SolidBrush(Color.Red), 0, 0, 100, 100);
        }

        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(99, 211);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // test
            // 
            this.ClientSize = new System.Drawing.Size(284, 261);
            this.Controls.Add(this.button1);
            this.Name = "test";
            this.ResumeLayout(false);

        }

        [STAThread]
        private static void Main(string[] args)
        {
            test myTest = new test();
            myTest.ShowDialog();

            //If use this code, rectangle is showing when form loaded
            //Application.Run(myTest);
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...