Я хочу нарисовать прямоугольник (используя 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);
}
}
}