gpt4 book ai didi

c# - 如何在 FlowLayoutPanel 中居中对齐多个单选按钮?

转载 作者:行者123 更新时间:2023-11-30 21:46:00 25 4
gpt4 key购买 nike

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

最佳答案

要微调控件在容器中的位置,您可以修改它们的 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);
}

enter image description here

enter image description here

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

centerControls(ctls, flowLayoutPanel1);

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

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

enter image description here

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以无代码的方式实现类似于第一个布局的方法!

关于c# - 如何在 FlowLayoutPanel 中居中对齐多个单选按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39613294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com