繁体   English   中英

添加控件时如何使suspendlayout工作?

[英]How can I get suspendlayout to work when adding controls?

我在窗体上显示的事件之后添加控件。 尽管我叫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";
    }     
}

UPDATE
似乎一旦这些表格开始加载...可见性和暂停调用将立即抛出窗口。 当Load事件长时间运行时,这很麻烦。

Winforms开发人员的默默无闻有所了解。 无论如何...我在构造函数中将表单的宽度和高度设置为1像素。 调用show时,我将窗口隐藏起来,然后将窗口放回正常大小。 在隐藏之前,很难注意到微小的窗口。

这使我的例程启动并加载表格显示,而没有所有的麻烦。

UPDATE
使用ShowDialogue()时,仅当在Form_Shown将控制权返回给调用者之前将Visible = true设置为true时,此愚蠢的小技巧才起作用。 我发现如果在Form中将Visible = true设置为。显示关闭事件将被触发...我翻转爱WINFORMS ....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM