【问题标题】:Add last digit or letter to a checkbox checkbox + "1".checked = true将最后一个数字或字母添加到复选框 checkbox + "1".checked = true
【发布时间】:2019-11-20 05:56:33
【问题描述】:

我希望能够通过像这样添加最后一个数字或字母来访问 Checkbox(或 Textbox 或类似名称):

int number = 1;
CheckBox tempCheckbox = "myform.checkBoxTool" + number;
tempCheckbox.Checked = true;

我想这已经涵盖了,但我似乎找不到正确的搜索词。

【问题讨论】:

  • 如何将它们放入列表(或数组)并通过索引(=您的“数字”)访问它?
  • 您应该考虑创建一个复选框列表,而不是checkBox1checkBox2 等,然后您可以通过它们的索引访问它:例如theCheckBoxes[0].
  • 您也可以考虑使用属性绑定。在 WPF 中,使用 MVVM 很容易做到这一点,但在 WinForms 中,这绝对不是火箭科学。见docs.microsoft.com/en-us/dotnet/framework/winforms/…docs.microsoft.com/en-us/dotnet/framework/winforms/…
  • 我知道列表/数组选项谢谢。

标签: c# winforms checkbox


【解决方案1】:

你有几个机会。最明显的是使用ControlsCollectionForm

var checkBox = myForm.Controls["myform.checkBoxTool" + number];

或者选择ControlCollection.Find:

var checkBox = myForm.Controls.Find("myform.checkBoxTool" + number, true).FirstOrDefault();    

但是,如果您有多个复选框,它们都只有一个索引不同,最好首先将它们存储为 CheckBox 的列表或数组:

List<CheckBox> myCheckBoxes = new List<CheckBox>();

现在您可以通过索引轻松访问它们:

var checkBox = myChekBoxes[number];

请注意,索引(与 .NET 中的任何数字一样)都是从零开始的。所以列表中的第一个元素的索引为零。

【讨论】:

  • 谢谢,我知道列表/数组选项,但它不是我在这里寻找的。如果我使用您的第一个选项,我该如何选中/取消选中它?
  • @JeeyBee 转换为 CheckBox 并设置属性? var checkBox = ((CheckBox) myForm.Controls["myform.checkBoxTool" + number]); checkBox.Checked = true;
【解决方案2】:

从技术上讲,如果tempCheckbox查询代码所在的同一个表单上,你可以试试Linq

using System.Linq;

...

public partial class MyForm : Form {
  ...

  int number = 1;

  CheckBox tempCheckbox = this
    .Controls
    .Find($"checkBoxTool{number}", true) // we don't want "myform." here
    .OfType<CheckBox>()
    .FirstOrDefault();

  // If check box found, check it
  if (tempCheckbox != null)
    tempCheckbox.Checked = true;

更好的方法是将这些控件组织到一个集合中,例如Dictionary:

  public partial class MyForm : Form {
    private Dictionary<int, CheckBox> m_CheckBoxTools = new Dictionary<int, CheckBox>();

    public MyForm() {
      InitializeComponent();

      m_CheckBoxTools.Add(1, checkBoxTool1);
      m_CheckBoxTools.Add(3, checkBoxTool3); 
      m_CheckBoxTools.Add(25, checkBoxTool25);
    }

然后就可以查询字典了

    if (m_CheckBoxTools.TryGetValue(number, out CheckBox tempCheckbox)) {
      tempCheckbox.Checked = true;
    } 

【讨论】:

    【解决方案3】:

    你可以使用类似下面的东西

    CheckBox chkList1 =new CheckBox();
    
    chkList1.Text = strCheckboxText;
    
    chkList1.ID="Chk"+intControlIndex;
    
    chkList1.Font.Name = "Verdana";
    
    chkList1.Font.Size = 9;
    
    chkList1.Checked = true;
    
    this.Form.Controls.Add(chkList1);
    

    然后您可以检查现有复选框并找到您的 ID。假设复选框在面板控件中。

       string str1="";
       foreach (Control c in panel1.Controls)
        {
            if((c is CheckBox) && ((CheckBox) c).Checked)                      
            str1 += c.ID+ ", "; 
        }
    
        str1=str1.Trim();
    

    【讨论】:

    • OP想要访问一个现有的复选框,而不是创建一个新的
    猜你喜欢
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多