我在Form上显示的事件后添加控件。尽管我调用了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事件长时间运行时,这非常麻烦。
答案 0 :(得分:1)
对Winforms
dev的默默无闻进行了一些攻击。无论如何......我在构造函数中将表单的宽度和高度设置为1像素。当调用show时,我隐藏窗口并将窗口恢复到正常大小。在它被隐藏之前很难注意到这个小窗口。
这可以让我的例程启动并加载表单显示而不会让人头疼。
<强>更新强>
当使用ShowDialogue()时,只有在Form_Shown将控制权返回给调用者之前设置Visible = true时,这个愚蠢的小技巧才有效。我发现如果你在Form.Shown中设置Visible = true,则会触发Closing事件......男人我喜欢WINFORMS ....
答案 1 :(得分:0)