c#:如何在固定 window 大小的两行中动态添加单选按钮

c#: How to add radio buttons dynamically in two rows with a fixed window size

我尝试将单选按钮动态添加到两行的 Windows Forms 应用程序(在我的例子中总是有偶数个单选按钮)。我找到了这个 ,它帮助我理解了通常如何添加单选按钮。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Test {
    public partial class Form1 : Form {
        FlowLayoutPanel pnl = new FlowLayoutPanel();

        public Form1() {
            InitializeComponent();
        }        

        void radioButtonHandler(object sender, EventArgs e)
        {
            MessageBox.Show("Radio Button", "Click");
        }

        private void Form1_Load(object sender, EventArgs e) {
            pnl.Dock = DockStyle.Fill;

            for (int i = 0; i < 16; i++)
            {
                pnl.Controls.Add(new RadioButton() { Text = "" + i });
                pnl.Controls[i].Click += new EventHandler(this.radioButtonHandler);
            }

            this.Controls.Add(pnl);
        }
    }
}

问题是,提到的问题不包括以下问题:

  1. 如何设置单选按钮之间的距离?
  2. 如何在第一行下方定义距离的情况下创建第二行?
  3. 如果按钮需要的 space 比当前 window 多,如何修复按钮并插入水平滚动条?
  4. 可选:在我的例子中,垂直线上的两个单选按钮始终属于一起。如果选择了另一个,是否可以自动取消选择上一个或下一个?每条垂直线只能有一个选定的单选按钮。也许与无线电组?
FlowLayoutPanel flp = new FlowLayoutPanel();
flp.Size = new Size(950, 100);
flp.BorderStyle = BorderStyle.FixedSingle;
flp.AutoScroll = true;

for (int i = 0; i < 20; i++)
{
    RadioButton rb = new RadioButton();
    rb.Text = i.ToString();
    rb.AutoSize = false;
    rb.Size = new Size(100, 25);
    flp.Controls.Add(rb);
}

this.Controls.Add(flp);
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.AutoScroll = true;
panel.WrapContents= true;
for (int i = 0; i < 16; i++)
{
   panel .Controls.Add(new RadioButton()
        {
            Text = "" + i,
            Anchor = AnchorStyles.Top | AnchorStyles.Bottom
                   | AnchorStyles.Left | AnchorStyles.Right,
            AutoSize = true,
            Margin = //your styles,
        });
   panel .Controls[i].Click += new EventHandler(this.radioButtonHandler);
}

设置 AnchorStyles 可以帮助您保持控件对齐,并且通过填充或大小等属性,您可以定义元素的大小,如果所有单选按钮具有相同的宽度,您可以使用大小 attribute.if 它们的大小不同最好使用 AnchorStyles .