0

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

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

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 属性,则用户控件正在调整大小但闪烁不良。

有什么方法可以强制 contrpls 立即调整大小。我尝试在表单和用户控件中暂停布局

修复: 我实际上并没有解决这个问题。我启用了自动调整大小属性为真。这会在表单加载期间导致严重的闪烁。

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

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

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

4

0 回答 0