我正在开发一个需要大约65个单选按钮的winform应用程序。我在这个论坛上看到有人说他们不会在设计师身上放那么多按钮。相反,在运行时显示按钮。我遇到的问题是按钮没有对齐。即使在Panel
内部,但当一名设计师拖动65个单选按钮时,他们也完美地排成了一排。设计上有那么多按钮是个坏主意吗?如果是,为什么?非常感谢。
我认为65个单选按钮太多了,不管是使用设计器还是在运行时添加它们,都可以使用ComboBox
。
但是,如果你认为你需要在运行时使用这些单选按钮,而你的问题是将它们排列在一列中(正如你在评论中所说),那么:
-
您可以使用
Panel
,并将单选按钮添加到面板中,并将其中的Dock
单选按钮设置为Top
。 -
此外,您还可以使用
FlowLayoutPanel
,并在添加每个单选按钮后设置中断。 -
此外,您还可以将
TableLayoutPanel
与一列一起使用,并将单选按钮添加到行中。
示例-使用面板
向窗体中添加一个面板,并将其设置为AutoScroll
属性true
。然后编写这样的代码,将单选按钮动态添加到面板中:
//You can have radio texts in a list.
//You can load them from database, file or somewhere else, or define them for example here
var list = new List<string>
{
"First radio text", "Second radio text", "Third radio text", "And so on"
};
this.panel1.SuspendLayout();
for (var i = 0; i < list.Count; i++)
{
var r = new RadioButton();
r.Text = list[i];
r.Tag = i;
r.Name = string.Format("r{0}", i);
r.Dock = DockStyle.Top;
r.CheckedChanged += r_CheckedChanged;
this.panel1.Controls.Add(r);
r.BringToFront();
}
this.panel1.ResumeLayout(true);
这里是CheckedChanged
事件的开发者:
void r_CheckedChanged(object sender, EventArgs e)
{
var radio = (RadioButton)sender;
//Use radio here
//for example int radioIndex = (int)radio.Tag;
//for example if(radio.Checked) ...
}
要访问带有名称的单选按钮,您可以使用:
//find radio number 26
var radio = (RadioButton)this.panel1.Controls["r25"];
此外,当您将单选按钮添加到面板中时,您可以将它们存储在List<RadioButton>
中,并在以后访问它们。