在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语句。为什么?
在框被选中之前检查它是否被选中。添加
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 if
或switch
语句)扩展它。
希望这将帮助。祝好,
您的问题是您在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;