在c#中动态检查复选框是否被选中

本文关键字:是否 复选框 检查 动态 | 更新日期: 2023-09-27 18:09:36

我已经通过这个按钮代码动态创建了一个复选框

private void btn_add_record_Click(object sender, EventArgs e)q2
{
CheckBox DeleteCheckBox = new CheckBox();
Point P_request = new Point(nXCheckBox, nYCheckBox);
DeleteCheckBox.Location = P_request;
DeleteCheckBox.Name = "CH"+Record_ID+"";
}

Then i手动检查然后,我需要检查一个特定的复选框,其名称是"CH"+Record_ID+"要检查或不动态使用此代码

string ChechBoxName = "CH1";
CheckBox DeleteChechBox = new CheckBox();
DeleteChechBox.Name = ChechBoxName;
if (DeleteChechBox.Checked)
{
 // To Do Code
}

当我调试这段代码时,它没有输入if语句。为什么?

在c#中动态检查复选框是否被选中

在框被选中之前检查它是否被选中。添加

DeleteChechBox.CheckedChanged += DeleteChechBoxCheckedChanged;

并添加DeleteChechBoxCheckedChanged方法,您可以在其中测试是否已被检查。也可以使用

DeleteChechBox.Checked = true;

通过代码复选框。

编辑:

要获取特定复选框的名称,您必须将其存储为全局变量或查看表单中的控件数组。

foreach (Control control in this.Controls)
{
    if (control.Name == "CH1")
    {
         CheckBox DeleteChechBox = (CheckBox)control;
         if (DeleteChechBox.Check)
         {
             //To Do Code
         }        
     }
}

创建新的CheckBox时,Checked的默认值为false。因此if (DeleteChechBox.Checked)返回false,这就是你不进入block的原因。您没有选中任何现有的复选框,您正在选中您创建的新复选框。

在WPF中,您可以像下面的代码片段(与您的示例相关)所示那样完成它:

string _strCheckBoxName = "CH1";
CheckBox DeleteCheckBox= new CheckBox();
DeleteCheckBox.Name = _strCheckBoxName ;
DeleteCheckBox.Checked+=(s,e)=>CheckBox_Change(s,e);
DeleteCheckBox.Unchecked+=(s,e)=>CheckBox_Change(s,e);
DeleteCheckBox.IsChecked = true;
private void CheckBox_Change(object sender, RoutedEventArgs e)
{
  if ((sender as CheckBox).Name=_strCheckBoxName && (bool)(sender as CheckBox).IsChecked)
  {
    // To Do Code
  }
}

在建议的解决方案中,您基本上将新创建的CheckBox控件订阅到单个事件处理程序过程,该过程查看控件名称,如果选中则运行一些代码。如果添加了更多的CheckBox,则使用指向相同处理程序的相同事件订阅技术,并使用另一个If语句(或if-else ifswitch语句)扩展它。

希望这将帮助。祝好,

您的问题是您在btn_add_record_Click处理程序中创建一个CheckBox,然后在第二个代码片段中创建一个新的,恰好具有与第一个相同的Name。尽管如此,它不是同一个复选框,所以它的Checked属性的值不会相同。

解决这个问题的方法是在表单的构造函数中创建复选框作为类成员,然后在需要时通过搜索components发现它,使用Xylorast显示的代码:
foreach (Control control in this.Controls)
{
    if (control.Name == "CH1")
    {
         CheckBox DeleteChechBox = (CheckBox)control;
         if (DeleteChechBox.Check)
         {
             //To Do Code
         }        
     }
}

这就是我的意思。也许你已经查过了?

string ChechBoxName = "CH1";
CheckBox DeleteChechBox = new CheckBox();
DeleteChechBox.Name = ChechBoxName;
DeleteChechBox.Checked = true;
if (DeleteChechBox.Checked)
{
 // To Do Code
}
编辑:

下面是另一种访问控件的方法,而不是为要访问的每个控件枚举表单上的所有控件:

Dictionary<string, CheckBox> checkBoxCollection = new Dictionary<string, CheckBox>();

在你创建复选框的方法中将它添加到字典中:

checkBoxCollection.Add("CH1",DeleteCheckBox);

从任何你想要的地方访问复选框,像这样:

CheckBox checkBox;
bool success = controls.TryGetValue("CH1"), out checkBox);
if (success)
{
    // To Do Code
}

或者在你的CheckedEvent中,你可以像这样得到CheckBox被选中:

CheckBox checkBox = sender as CheckBox;