将复选框动态添加到 Windows 窗体仅显示一个复选框

Posted

技术标签:

【中文标题】将复选框动态添加到 Windows 窗体仅显示一个复选框【英文标题】:Dynamically Adding Checkboxes to a Windows Form Only Shows one Checkbox 【发布时间】:2013-02-06 23:00:06 【问题描述】:

很抱歉,如果这看起来很奇怪,但我已经搜索了几天了。我正在尝试将复选框动态添加到 Windows 窗体;但是,表单上只出现一个复选框。这是我的代码:

for (int i = 0; i < 10; i++)

    box = new CheckBox();
    box.Tag = i.ToString();
    box.Text = "a";
    box.AutoSize = true;
    box.Location = new Point(10, i + 10);
    Main.Controls.Add(box);

如您所见,我正在通过 for 循环添加复选框。我试过弄乱位置并启用自动调整大小,以防它们以某种方式重叠。结果是一个带有文本“a”的复选框。

【问题讨论】:

尝试 i * 50 而不是 i + 10,这只会将每个框移动 1 个像素 【参考方案1】:

实际上您已经创建了一个CheckBox,但在同一点内。

CheckBox box;
for (int i = 0; i < 10; i++)

    box = new CheckBox();
    box.Tag = i.ToString();
    box.Text = "a";
    box.AutoSize = true;
    box.Location = new Point(10, i * 50); //vertical
    //box.Location = new Point(i * 50, 10); //horizontal
    this.Controls.Add(box);

【讨论】:

只是对 OP 的说明,因为与其他答案有些混淆......在循环中使用 box = new CheckBox(); 而不是 CheckBox box = new CheckBox(); 也可以。 感谢您的快速回复!问题是:复选框之间的垂直距离太小,并且复选框不是在 for 循环中创建的。 @NominSim 是的,我知道。这就是为什么我从我的回答中说的。 只要跟着我的回答@cruskai239你就能看到区别 @cruskai239 只有一个问题......其他答案不正确,告诉您box = new CheckBox(); 是错误的。每次调用 new... 时,您都会创建一个 new CheckBox【参考方案2】:

在这种情况下,在动态分配 Name 属性的帮助下,如何在提交按钮等其他操作中实现 checkbox.checked 属性。我怎样才能让所有复选框都被选中并在循环中创建?

【讨论】:

【参考方案3】:

如果你有每个按钮的实例,你可以用你的按钮或你的事件来制作类似的东西

 CheckBox myCheckedBox = (CheckBox)sender;

【讨论】:

以上是关于将复选框动态添加到 Windows 窗体仅显示一个复选框的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#Winform窗体的Treeview上面添加CheckBox复选框

C#Windows窗体 - 调整窗体大小时移动元素

如何从编码中将复选框添加到datagridview

如何将 datetimepicker 下拉菜单设置为仅显示月份

如何在windows窗体里面添加窗口

Windows 窗体中的刷新组合框