フォームに表示されたイベントの後にコントロールを追加しています。私が電話したにもかかわらず、コントロールは一度に1つずつ表示されSuspendLayout()
ます。レイアウトを一時停止して、コントロールがすべてロードが完了したときにのみ表示されるようにするにはどうすればよいですか?
public partial class ControlCreateTest : Form
{
public ControlCreateTest()
{
InitializeComponent();
}
private void AsyncControlCreateTest_Shown(object sender, EventArgs e)
{
CreateControls();
}
private void CreateControls()
{
SuspendLayout();
int startPoint= 0;
for (int i = 0; i < 4; i++)
{
UserControl control = new UserControl() { Text = i.ToString(), Height = 100, Width = 100 };
control.Load += control_Load;
Controls.Add(control);
control.Top = startPoint;
startPoint += control.Height;
}
ResumeLayout();
Text = "Loading complete";
}
void control_Load(object sender, EventArgs e)
{
Thread.Sleep(500);
RichTextBox newRichTextBox = new RichTextBox() { Height = 100, Width = 100 };
UserControl control = sender as UserControl;
control.Controls.Add(newRichTextBox);
newRichTextBox.Text = "loaded";
}
}
更新
これらのフォームの読み込みが開始されると、可視性と一時停止の呼び出しがすぐにウィンドウからスローされるようです。Loadイベントが長時間実行されている場合、これは非常に厄介です。