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