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);
}
}
}
问题是,提到的问题不包括以下问题:
- 如何设置单选按钮之间的距离?
- 如何在第一行下方定义距离的情况下创建第二行?
- 如果按钮需要的 space 比当前 window 多,如何修复按钮并插入水平滚动条?
- 可选:在我的例子中,垂直线上的两个单选按钮始终属于一起。如果选择了另一个,是否可以自动取消选择上一个或下一个?每条垂直线只能有一个选定的单选按钮。也许与无线电组?
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 .
我尝试将单选按钮动态添加到两行的 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);
}
}
}
问题是,提到的问题不包括以下问题:
- 如何设置单选按钮之间的距离?
- 如何在第一行下方定义距离的情况下创建第二行?
- 如果按钮需要的 space 比当前 window 多,如何修复按钮并插入水平滚动条?
- 可选:在我的例子中,垂直线上的两个单选按钮始终属于一起。如果选择了另一个,是否可以自动取消选择上一个或下一个?每条垂直线只能有一个选定的单选按钮。也许与无线电组?
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 .