Здравствуйте,
C#, версия csc — 8.00.50727.42, Framework — 2.0.50727, WinXP SP2.
Вот минимальный проблемный код:
using System;
using System.Windows.Forms;
using System.Drawing;
class MyForm :
Form
{
public MyForm()
{
WindowState = FormWindowState.Maximized;
pct_ = new PictureBox();
pct_.Dock = DockStyle.Fill;
btn_ = new Button();
btn_.Click += new System.EventHandler(OnClick);
Controls.Add(pct_);
Controls.Add(btn_);
Invalidate();
return;
}
protected override void OnPaint(PaintEventArgs args)
{
base.OnPaint(args);
Draw();
return;
}
public void OnClick(object sender, System.EventArgs args)
{
Form2 f = new Form2();
f.ShowDialog();
Invalidate();
return;
}
public void Draw()
{
Graphics gph = pct_.CreateGraphics();
gph.Clear(Color.Red);
gph.Dispose();
return;
}
private Button btn_;
private PictureBox pct_;
}
class Form2 :
Form
{
}
class App
{
public static int Main()
{
Application.Run(new MyForm());
return 0;
}
};
По моему разумению этот код должен:
1) Рисовать форму, развернутую на весь экран, закрашивать ее красным цветом;
2) По нажатию на кнопку (ее не видно, нажимал ентером) показывать модальную форму;
3) По закрытию модальной формы перерисовывать основную так, чтобы она снова была полностью закрашена красным.
В результате:
1) Форма загружается, разворачивается, просто мигает красным и остается серой;
2) Ок
3) Послы закрытия модальной формы перерисовка происходит, но на красном фоне остается серый след от закрытой формы.
Что интересно, если f.ShowDialog() заменить на MessageBox.Show(...), следов от закрытого MessageBox'а не остается.
Подскажите, пожалуйста:
1) Почему так происходит?
2) Как лечить?
Заранее спасибо.