暂停布局恢复布局

时间:2013-07-29 17:16:16

标签: c# winforms gdi+ onpaint

我有一个带有流程布局面板的用户控件。该控件可以具有一个或多个相同的控件。此层次结构可以增长到多个级别。

最初我正在添加Root Control。然后将控件添加到根控件(流布局面板)。

private void Form2_Load(object sender, EventArgs e)
{ 
    SuspendLayout();
    AddControls(containerControl1, _rootFileNode.Nodes);
    ResumeLayout(false);
    PerformLayout();
}

private void AddControls(IContainerNode parent, ICollection<INode> childNodes)
{
    foreach (var node in childNodes)
    {
        switch (node.FileType)
        {
            case FileType.File:
                parent.AddNode(node);
                break;

            case FileType.Directory:
                {
                    var container = parent.AddNode(node) as IContainerNode;
                    AddControls(container, node.Nodes);
                    break;
                }
        }
    }
}

实际添加控件的代码(ContainerControl类)。

public DesignerBase AddNode(INode node)
{
    //Get the corresponding Control
    //Simple User Control with label and RTF- If File Node
    //User Control with FlowLayout and other controls - If Folder Node

    var designerBlock = DesignerBlockFactory.Get(node);
    flowLayoutMain.Controls.Add(designerBlock);
    return designerBlock;
}

问题是,我有多个级别的控件。但似乎根容器内的直接容器没有正确调整大小。所以节点部分显示。如果我启用用户控件的AutoResize属性,则用户控件正在调整大小但闪烁不正确。

有没有办法迫使委托立即调整大小。我在表单和用户控件中尝试了暂停布局

修正: 我实际上没有解决这个问题。我启用了auto resize属性为true。这在表单加载期间导致错误的闪烁。

为了减少闪烁,我在表单中添加了以下代码。

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;
        return cp;
    }
}

一旦加载了所有控件,这将显示表单。因此,在表单加载之前会有一个初始延迟。

0 个答案:

没有答案