当Dock更改时,UserControl不在FlowLayoutPanel内呈现

use*_*939 5 c# anchor dock flowlayoutpanel winforms

当我将UserControls添加到FlowLayoutPanel时,它们会正确显示.当我在添加它们之前更改UserControls上的Dock或Anchor属性时,它们仍然会被添加但不会渲染.

根据" 如何:锚定和停靠儿童控制 "这应该是可能的.

  • 我可以告诉控件是添加的(尽管没有绘图),因为添加足够的控件会导致出现垂直滚动条.
  • 将UserControls的"Dock"属性设置为"Left"或"None"将导致它们呈现,但没有其他选项.
  • 将UserControls上的"Anchor"属性设置为除Top |之外的任何内容 左不呈现.
  • 在添加控件之前或之后设置底座没有区别(Add,Dock vs. Dock,Add).
  • FlowLayoutPanel本身是停靠(Fill),FlowDirection设置为TopDown,WrapContents设置为false,AutoScroll设置为true,否则默认.

我使用的是.NET 3.5.


在回答评论时,两条注释行是我试图更改基座的位置.第二点肯定更有意义,但我尝试了另一个,因为它不会伤害.

public void CreateObjectControl( object o )
{
    ObjectControl oc = new ObjectControl();

    oc.MyObject = o;

    //This was a spot I mentioned:
    //oc.Dock = DockStyle.Fill;

    ObjectDictionary.Add( o, oc );
    flowLayoutPanel1.Controls.Add( oc );

    //This is the other spot I mentioned:
    oc.Dock = DockStyle.Fill;
}
Run Code Online (Sandbox Code Playgroud)

XYZ*_*XYZ 0

在进行任何需要渲染才能正确查看的修改之前,请尝试对控件使用 SuspendLayout 和 Resumelayout 函数。

您可以从 Designer.cs 中看到该特定控件的代码

句法

control.SuspendLayout();
{Your code for designer amendments}
control.resumeaLayout();
Run Code Online (Sandbox Code Playgroud)