儿童不需要';似乎不想按预期填充FlowLayout(C#)
我是C#的新手,可能遗漏了一些明显的东西。我只发现了一个相关的问题,它既不是完全匹配的问题,也不是非常权威的问题 我想要的是使它能够停靠在FlowLayout(从左到右设置)中的控件,这样它将填充整个垂直空间,当用户调整表单大小时,控件将调整大小以继续填充整个垂直空间。可以这样做吗?如果可以,怎么做 我发现: 我已经创建了一个表单。我把它涂成了红色。我添加了一个FlowLayout,我把它涂成了绿色,并设置了Dock来填充表单。这似乎起作用了(表单现在全是绿色的,看不到红色) 然后,我向FlowLayout(从左到右运行)添加了几个控件。如果我把它们放在上面,它就会像预期的那样工作。如果我把它们固定在底部,它和顶部是一样的;表明垂直空间并不是整个绿地。停靠左侧、右侧或填充组件根本不会出现,除非我为它们指定最小大小>0 我有一些代码来说明我的意思;我已经在其中一个控件中添加了一些大小,可以看出这似乎可以调整到允许的最小垂直大小。包括输出屏幕截图 编辑 好的,下面的答案并没有回答这个问题,但我接受了它,因为我现在确信答案是FlowLayoutPanel无法做到这一点。答案(至少是编辑)与我的答案差不多。玩TableLayoutPanel似乎是获得我需要的东西的唯一方法 对于这艘船上的人,我也觉得很有帮助儿童不需要';似乎不想按预期填充FlowLayout(C#),c#,winforms,user-interface,layout,user-controls,C#,Winforms,User Interface,Layout,User Controls,我是C#的新手,可能遗漏了一些明显的东西。我只发现了一个相关的问题,它既不是完全匹配的问题,也不是非常权威的问题 我想要的是使它能够停靠在FlowLayout(从左到右设置)中的控件,这样它将填充整个垂直空间,当用户调整表单大小时,控件将调整大小以继续填充整个垂直空间。可以这样做吗?如果可以,怎么做 我发现: 我已经创建了一个表单。我把它涂成了红色。我添加了一个FlowLayout,我把它涂成了绿色,并设置了Dock来填充表单。这似乎起作用了(表单现在全是绿色的,看不到红色) 然后,我向Flow
我发现很多人对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);
}
}