C# 对设计器的控制太多是个坏主意吗?
我正在开发一个winform应用程序,它需要大约65个单选按钮。我在这个论坛上读到有人说他们不会在设计师身上放那么多按钮。而是在运行时显示按钮。我遇到的问题是按钮没有对齐。甚至在C# 对设计器的控制太多是个坏主意吗?,c#,winforms,radio-button,C#,Winforms,Radio Button,我正在开发一个winform应用程序,它需要大约65个单选按钮。我在这个论坛上读到有人说他们不会在设计师身上放那么多按钮。而是在运行时显示按钮。我遇到的问题是按钮没有对齐。甚至在面板内但当一个设计师拖动65个单选按钮时,它们就完美地排列起来了。设计上有那么多按钮是个坏主意吗?如果是,为什么?谢谢。我认为65个单选按钮太多了,无论您是使用designer还是在运行时添加它们都没有关系,您可以使用组合框来代替 但是,如果您认为需要在运行时使用这些单选按钮,而您的问题是在一列中对齐它们(如您在评论中所
面板内
但当一个设计师拖动65个单选按钮时,它们就完美地排列起来了。设计上有那么多按钮是个坏主意吗?如果是,为什么?谢谢。我认为65个单选按钮太多了,无论您是使用designer还是在运行时添加它们都没有关系,您可以使用组合框来代替
但是,如果您认为需要在运行时使用这些单选按钮,而您的问题是在一列中对齐它们(如您在评论中所说),那么:
- 您可以使用
向面板添加单选按钮,并将单选按钮的面板
设置为停靠
顶部
- 您还可以使用
并在添加每个单选按钮后设置中断FlowLayoutPanel
- 您还可以对一列使用
,并向行中添加单选按钮TableLayoutPanel
AutoScroll
propertytrue
。然后编写这样的代码,将单选按钮动态添加到面板:
//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);
要访问名为的单选按钮,可以使用:
//find radio number 26
var radio = (RadioButton)this.panel1.Controls["r25"];
此外,当您将单选按钮添加到面板时,您可以将其存储在
列表中
,并在以后访问它们。65单选按钮太多了,无论您是使用designer还是在运行时添加它们都无所谓。为什么不使用组合框呢?我认为这对最终用户来说是一个更好的可见性。我有65个代表合同条款的段落,基于最终用户选择的单选按钮,该段落将显示出来。示例:单选按钮32表示第3.02.06条。等等。你可以选择任何你认为更适合你的应用程序的解决方案:)但我认为如果你需要一些帮助,比如调整单选按钮,最好问一个具体的问题。这个问题现在太笼统了,而且是基于观点的。@Reza我很感谢你的评论,我是来学习的,请给我一个例子,说明如何在面板上排列单选按钮。你喜欢将它们放在一列还是多列中?我知道我知道,我需要更多帮助。如何以及在何处放置if-else语句。我将代码的第一部分放在button1中以生成创建单选按钮的代码,如何调用button2上的每个单选按钮?我还把代码的第二部分放在按钮2中????谢谢。你需要什么if
语句?你想在哪里调用单选按钮?我想能够调用按钮2单选按钮上的任何if语句。换句话说,如果选中单选按钮1,请执行此操作,等等。你可能需要在r\u checked changed
中编写一些代码,在那里你可以使用收音机
和它的已选中
或其他属性。另外,因为我们以这种方式设置单选按钮的名称r.name=string.Format(“r{0}”,i)
,只要您想按名称访问任何单选按钮,就可以使用var radio=(RadioButton)this.panel1.Controls[“r0”]编码>(0,1,2,3…直到列表。计数-1)并使用收音机
。另外,在向表单中添加无线电时,可以使用var radios=new List()
并将收音机添加到收音机中,然后您可以通过收音机[15]
访问每个收音机。
//find radio number 26
var radio = (RadioButton)this.panel1.Controls["r25"];