【问题标题】:How to center align multiple radio buttons in FlowLayoutPanel?如何在 FlowLayoutPanel 中居中对齐多个单选按钮?
【发布时间】:2016-09-21 09:57:42
【问题描述】:

我正在使用 Windows 窗体并尝试在 FlowLayoutPanel 上添加多个单选按钮。我可能会动态添加 10-12 个单选按钮并可能会删除它们,但它们始终位于FlowLayoutPanel 的中心。目前正在添加它们,如下图所示:

【问题讨论】:

  • 为什么要使用Flowlayoutpanel?您可以简单地使用 TableLayoutPanel 并将控件居中。
  • 锚属性可能会对您有所帮助。 (设置为左右)
  • 实际阅读这个问题应该对你们俩都有帮助..

标签: c# winforms flowlayoutpanel


【解决方案1】:

要微调控件在其容器中的位置,您可以修改其Margin 属性。

假设您有控件可以在列表中居中:

List<Control> ctls = new List<Control>();
foreach (Control c in flowLayoutPanel1.Controls) ctls.Add(c);

你可以调用一个函数来对齐它们:

void centerControls(List<Control> ctls, Control container)
{
    int w = container.ClientSize.Width;
    int marge = (w - ctls.Sum(x => x.Width)) / 2;
    Padding oldM = ctls[0].Margin;
    ctls.First().Margin = new Padding(marge, oldM.Top, oldM.Right, oldM.Bottom);
    ctls.Last().Margin = new Padding(oldM.Left, oldM.Top, oldM.Right, marge);
}

在添加或删除控件时调用该函数:

centerControls(ctls, flowLayoutPanel1);

添加新按钮时,您需要重置Margins..

请注意,我只更改了外部Margins,而不是之间的空格。要执行后者,您可以计算空间并更改所有控件的Margins

void spaceControls(List<Control> ctls, Control container)
{
    int w = container.ClientSize.Width;
    int marge = (w - ctls.Sum(x => x.Width)) / (ctls.Count * 2 );
    Padding oldM = ctls[0].Margin;
    Padding newM = new Padding(marge, oldM.Top, marge, oldM.Bottom);
    foreach (Control c in ctls) c.Margin = newM;
}

还要考虑当RadioButtons 超过一排时会发生什么!您可能希望在维护列表方面付出更多努力..

还请注意,用户不喜欢他们的控件经常跳来跳去!

更新:请查看 Reza 的帖子 herehere,了解以无代码方式实现第一个布局之类的方法!

【讨论】:

  • 不用写代码就可以实现这样的布局。如果您在具有单个单元格的TableLayoutPanel 中托管一个自动调整大小的FlowLayoutPanel,其锚点设置为TopBottom,则添加到FlowLayouPanel 的控件将始终对齐在TableLayouPanel。这个post 包含实现这种布局所需的设置。使用此类设置可使布局更可靠 IMO。
  • TableLayoutPanel 带有单个单元格的一个很好的功能是它可以帮助我们将内容垂直和水平居中放在中心,而无需像this post 中提到的那样编写一行代码。
  • 无论如何,您的代码也可以正常工作,但是 OP 应该注意边距,并且当容器大小发生变化时,他们应该应用这些方法。
  • 这确实很有趣! - 不确定添加十几个 RadioButton 时是否可以远离代码,以及是否要控制转到的行。但是这个问题有点不清楚..
猜你喜欢
  • 2013-02-09
  • 1970-01-01
  • 2015-09-28
  • 2021-09-08
  • 1970-01-01
  • 2015-12-27
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多