儿童不需要';似乎不想按预期填充FlowLayout(C#)

儿童不需要';似乎不想按预期填充FlowLayout(C#),c#,winforms,user-interface,layout,user-controls,C#,Winforms,User Interface,Layout,User Controls,我是C#的新手,可能遗漏了一些明显的东西。我只发现了一个相关的问题,它既不是完全匹配的问题,也不是非常权威的问题 我想要的是使它能够停靠在FlowLayout(从左到右设置)中的控件,这样它将填充整个垂直空间,当用户调整表单大小时,控件将调整大小以继续填充整个垂直空间。可以这样做吗?如果可以,怎么做 我发现: 我已经创建了一个表单。我把它涂成了红色。我添加了一个FlowLayout,我把它涂成了绿色,并设置了Dock来填充表单。这似乎起作用了(表单现在全是绿色的,看不到红色) 然后,我向Flow

我是C#的新手,可能遗漏了一些明显的东西。我只发现了一个相关的问题,它既不是完全匹配的问题,也不是非常权威的问题

我想要的是使它能够停靠在FlowLayout(从左到右设置)中的控件,这样它将填充整个垂直空间,当用户调整表单大小时,控件将调整大小以继续填充整个垂直空间。可以这样做吗?如果可以,怎么做

我发现:

我已经创建了一个表单。我把它涂成了红色。我添加了一个FlowLayout,我把它涂成了绿色,并设置了Dock来填充表单。这似乎起作用了(表单现在全是绿色的,看不到红色)

然后,我向FlowLayout(从左到右运行)添加了几个控件。如果我把它们放在上面,它就会像预期的那样工作。如果我把它们固定在底部,它和顶部是一样的;表明垂直空间并不是整个绿地。停靠左侧、右侧或填充组件根本不会出现,除非我为它们指定最小大小>0

我有一些代码来说明我的意思;我已经在其中一个控件中添加了一些大小,可以看出这似乎可以调整到允许的最小垂直大小。包括输出屏幕截图

编辑

好的,下面的答案并没有回答这个问题,但我接受了它,因为我现在确信答案是FlowLayoutPanel无法做到这一点。答案(至少是编辑)与我的答案差不多。玩TableLayoutPanel似乎是获得我需要的东西的唯一方法

对于这艘船上的人,我也觉得很有帮助


我发现很多人对FlowLayoutPanel做出了和我一样的错误假设。我认为在我的例子中,这是因为我有Java背景,而FlowLayouts在Java中的工作方式不同

这里是一个使用
主持人风格的示例。右

编辑:

创建所需布局的最简单方法是:

public class TLPForm : Form {

    TableLayoutPanel p = new TableLayoutPanel { Dock = DockStyle.Fill };

    public TLPForm() {
        var style = AnchorStyles.Top | AnchorStyles.Bottom;
        Button btn1 = new Button { Text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", AutoSize = true, AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink, Anchor = style };
        Button btn2 = new Button { Text = "ABCD", AutoSize = true, AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink, Anchor = style };
        Button btn3 = new Button { Text = "ABCD", AutoSize = true, AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink, Anchor = style };
        p.Controls.Add(btn1, 0, 0);
        p.Controls.Add(btn2, 1, 0);
        p.Controls.Add(btn3, 2, 0);
        p.Controls.Add(new Control(), 3, 0); // <-- takes up the rest of the space
        Controls.Add(p);
    }
}
公共类TLPForm:表单{
TableLayoutPanel p=new TableLayoutPanel{Dock=DockStyle.Fill};
公共TLPForm(){
var style=主播样式。顶部|主播样式。底部;
按钮btn1=新按钮{Text=“abcdefghijklmnopqrstuvxyz”,AutoSize=true,AutoSizeMode=System.Windows.Forms.AutoSizeMode.grownandshrink,Anchor=style};
按钮btn2=新建按钮{Text=“ABCD”,AutoSize=true,AutoSizeMode=System.Windows.Forms.AutoSizeMode.growtandshrink,Anchor=style};
按钮btn3=新建按钮{Text=“ABCD”,AutoSize=true,AutoSizeMode=System.Windows.Forms.AutoSizeMode.growtandshrink,Anchor=style};
p、 添加(btn1,0,0);
p、 添加(btn2,1,0);
p、 添加(btn3,2,0);

p、 添加(新控件(),3,0);//FlowLayoutPanel
类不使用
DockStyle
AnchorsStyles
属性。它的主要功能是它的
FlowDirection
属性。
TableLayoutPanel
可能更适合您试图创建的布局。谢谢,我来试一试。奇怪的信息很难找到核心文档没有帮助。但是,有一些教程提供了更好的信息,例如,根据我的经验,
AnchorStyles
相对于其他控件工作。因此,一个控件本身不足以使锚点样式正常工作。有些不直观。也就是说,这取决于
LayoutEngine的算法我需要决定使用哪些属性以及如何使用它们。因此,我关于它的第一条评论没有使用
主播样式
是错误的。感谢您的回复。这与我发现的一致,但我想要的是组件贴在右侧。布局似乎占据了它所在的整个容器,但组件t似乎总是卡在左上角。对不起,我不想让部件粘在右边。我的意思是从上到下伸展。
public class FlowForm2 : Form {

    public FlowForm2() {
        Button btn1 = new Button { Text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", AutoSize = true };
        Button btn2 = new Button { Text = "ABCD", AutoSize = true };
        btn2.Anchor = AnchorStyles.Right;

        FlowLayoutPanel p = new FlowLayoutPanel { Dock = DockStyle.Fill, FlowDirection = FlowDirection.TopDown, WrapContents = false };
        p.Controls.Add(btn1); // if btn1 isn't added, then btn2 appears on the LEFT side
        p.Controls.Add(btn2); // however, if btn1 is added, then btn2 is right justified with the right edge of btn2

        Controls.Add(p);
    }
}
public class TLPForm : Form {

    TableLayoutPanel p = new TableLayoutPanel { Dock = DockStyle.Fill };

    public TLPForm() {
        var style = AnchorStyles.Top | AnchorStyles.Bottom;
        Button btn1 = new Button { Text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", AutoSize = true, AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink, Anchor = style };
        Button btn2 = new Button { Text = "ABCD", AutoSize = true, AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink, Anchor = style };
        Button btn3 = new Button { Text = "ABCD", AutoSize = true, AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink, Anchor = style };
        p.Controls.Add(btn1, 0, 0);
        p.Controls.Add(btn2, 1, 0);
        p.Controls.Add(btn3, 2, 0);
        p.Controls.Add(new Control(), 3, 0); // <-- takes up the rest of the space
        Controls.Add(p);
    }
}