C# 如何使FlowLayoutPanel.AutoSize与FlowBreak一起工作

C# 如何使FlowLayoutPanel.AutoSize与FlowBreak一起工作,c#,winforms,flowlayoutpanel,C#,Winforms,Flowlayoutpanel,我有一个FlowLayoutPanel的问题,我不知道如何解决它 我将两个FlowLayoutPanel放置在另一个FlowLayoutPanel中;第二个内部flp内部有3个按钮 FlowLayoutPanel子级的属性为: FlowDirection = LeftToRight; AutoSize = true; AutoSizeMode = GrowAndShrink; WrapContents = true; 现在我将每个按钮的FlowBreak属性设置为true,但是我看到的行为不

我有一个FlowLayoutPanel的问题,我不知道如何解决它

我将两个FlowLayoutPanel放置在另一个FlowLayoutPanel中;第二个内部flp内部有3个按钮

FlowLayoutPanel子级的属性为:

FlowDirection = LeftToRight;
AutoSize = true;
AutoSizeMode = GrowAndShrink;
WrapContents = true;
现在我将每个按钮的
FlowBreak
属性设置为true,但是我看到的行为不是我想要的,我希望FlowLayoutPanel缩小到按钮的宽度

流向
更改为
向上向下
不是一个选项

有人知道为什么自动调整不起作用吗

这是代码

//
//FlowLayoutPanel1
//
this.FlowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.FlowLayoutPanel1.Controls.Add(this.FlowLayoutPanel3);
this.FlowLayoutPanel1.Location = new System.Drawing.Point(84, 77);
this.FlowLayoutPanel1.MinimumSize = new System.Drawing.Size(10, 10);
this.FlowLayoutPanel1.Name = "FlowLayoutPanel1";
this.FlowLayoutPanel1.Size = new System.Drawing.Size(308, 265);
this.FlowLayoutPanel1.TabIndex = 0;
//
//FlowLayoutPanel3
//
this.FlowLayoutPanel3.AutoSize = true;
this.FlowLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.FlowLayoutPanel3.Controls.Add(this.Button1);
this.FlowLayoutPanel3.Controls.Add(this.Button2);
this.FlowLayoutPanel3.Controls.Add(this.Button3);
this.FlowLayoutPanel3.Location = new System.Drawing.Point(127, 3);
this.FlowLayoutPanel3.MinimumSize = new System.Drawing.Size(10, 10);
this.FlowLayoutPanel3.Name = "FlowLayoutPanel3";
this.FlowLayoutPanel3.Size = new System.Drawing.Size(162, 87);
this.FlowLayoutPanel3.TabIndex = 1;
//
//Button1
//
this.FlowLayoutPanel3.SetFlowBreak(this.Button1, true);
this.Button1.Location = new System.Drawing.Point(3, 3);
this.Button1.Name = "Button1";
this.Button1.Size = new System.Drawing.Size(75, 23);
this.Button1.TabIndex = 0;
this.Button1.Text = "Button1";
this.Button1.UseVisualStyleBackColor = true;
//
//Button2
//
this.FlowLayoutPanel3.SetFlowBreak(this.Button2, true);
this.Button2.Location = new System.Drawing.Point(3, 32);
this.Button2.Name = "Button2";
this.Button2.Size = new System.Drawing.Size(75, 23);
this.Button2.TabIndex = 1;
this.Button2.Text = "Button2";
this.Button2.UseVisualStyleBackColor = true;
//
//Button3
//
this.Button3.Location = new System.Drawing.Point(3, 61);
this.Button3.Name = "Button3";
this.Button3.Size = new System.Drawing.Size(75, 23);
this.Button3.TabIndex = 2;
this.Button3.Text = "Button3";
this.Button3.UseVisualStyleBackColor = true;

这不是一个解决方案,而是一个变通办法。看起来您正试图通过在
FlowLayoutPanel
中使用流中断来模拟
TableLayoutPanel
的行为。您是否尝试改用
TableLayoutPanel
?根据您在评论中的屏幕截图,它应该可以完美地满足您的需要。

我不相信FlowLayoutPanel是为完成您的任务而设计的。 桌面布局面板可能更合适。添加一个带有单列的TableLayoutPanel,并将每个按钮添加到一行

编辑:我在附近找到了一份黑客作品。在第一个按钮之后,创建一个大小为0,0、边距为0,0的面板。确保FlowBreak设置为false


编辑:您只需在第一个按钮后创建一个面板,而不是为每个按钮创建一个面板。

这是一个bug,已经存在很长时间了。问题是FlowLayoutPanel的布局引擎计算第一行的宽度时出错,包括第二个控件的宽度,即使它被包装到第二行


解决方法虽然愚蠢但有效,在第一个控件后添加宽度为0的虚拟面板。如果要使用设计器执行此操作,请首先将其拖放到正确的位置,即第一个控件的右侧。然后在“属性”窗口中将其边距设置为(0,0,0,0),大小设置为(0,0)。

这是我的GUI中的一个控件的问题。当我放置两个控件并将FlowBrake设置为True时,我希望控件保持不变,但由于宽度更改不合适。请添加两个图像,一个显示您拥有的图像,另一个显示您尝试实现的图像。从文本描述来看,不清楚您面临的问题是什么。我添加了一个新的图像,结果是,在我之前的评论中,我在我的GUI上添加了两个与行为相关的链接。为什么要将方向改为自上而下;问题的DR版本
为什么使用AutoSize在布局面板的右侧保留了足够的空间,好像它将适合所有现有按钮中最大的按钮?
同样的想法,同样的时间。向上投票…:)你的
黑客工作真是太棒了。我也试图找到一个这样的,但我并没有想到面板控制。我希望我能再给你一次投票。在我的gui中,用户可以安排任何按钮的顺序和位置。用户还可以在容器中拖放按钮。如果我创建了一个表格布局面板,那么当用户放弃对该面板的控制时,表格的行为并不是无关紧要的,因为我们可以有一列控件、一行或一个表格。@Natalia:你想实现吗?节省了我的时间。。非常感谢。