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

时间:2014-06-21 20:19:32

标签: c#

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

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+"";
}

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

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

当我调试此代码时,它不会输入if语句..为什么?

5 个答案:

答案 0 :(得分:3)

您正在检查是否在检查之前检查了该框。添加

DeleteChechBox.CheckedChanged += DeleteChechBoxCheckedChanged;

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

DeleteChechBox.Checked = true;

通过代码检查框。

修改 要通过它的名称获取某个复选框,您必须将其存储为全局变量或查看表单中的controls数组。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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;

答案 3 :(得分:0)

在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控件订阅到单个事件处理程序proc,它会查看控件名称,如果选中则运行某些代码。如果添加了更多CheckBox,则使用指向同一处理程序的相同事件订阅技术,并使用另一个if语句(或if-else ifswitch语句)扩展它。

希望这会有所帮助。 RGDS,

答案 4 :(得分:0)

您的问题是,您正在CheckBox处理程序中创建一个btn_add_record_Click,然后在第二个代码片段中创建一个新的Name,恰好与Checked具有相同的components第一。尽管如此,它不是相同的复选框,因此其foreach (Control control in this.Controls) { if (control.Name == "CH1") { CheckBox DeleteChechBox = (CheckBox)control; if (DeleteChechBox.Check) { //To Do Code } } } 属性的值不会相同。

解决这个问题的方法是在表单构造函数中创建一个复选框作为类成员,然后在需要时通过使用代码{{3}搜索{{1}}来发现它。显示:

{{1}}