我有一个带有流布局面板的用户控件。这个控件可以有一个或多个相同的控件。此层次结构可以增长到许多级别。
最初我正在添加根控件。然后将控件添加到根控件(流布局面板)。
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;
}
}
一旦加载了所有控件,这将显示表单。所以在表单加载之前会有一个初始延迟。