设计器上的控件太多是个坏主意吗



我正在开发一个需要大约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>中,并在以后访问它们。

最新更新