我正在使用Visual C ++中的Visual Studio开发Windows窗体应用程序。我的表单上有96个复选框。而不是创建96个Click事件,我相信有一种方法可以创建单击Click事件,在单击任何复选框时调用该事件。在Click事件中,我需要确定活动复选框是Checked还是Not Checked。虽然这应该很容易,但我似乎无法弄明白!
我让它使用下面的代码,但我确信有更好的方法。
if (sender == checkBox_D1)
{
if (checkBox_D1->Checked)
isChecked = true;
}
else if (sender == checkBox_D2)
{
if (checkBox_D2->Checked)
isChecked = true;
}
else
return; // Invalid sender - should not get here!
if (isChecked)
{
// Do something
}
else
{
// Do something else
}
我也试过下面的代码但是activeCheckBox不是Checkbox对象,所以它不起作用。
Control ^ activeCheckBox = ActiveControl;
activeCheckBox-> Text返回Checkbox的Text属性
activeCheckBox-> Checked无法编译。错误是'Checked':不是'System :: Windows :: Forms :: Control'
的成员似乎发件人拥有我需要的数据,但我不知道如何访问它。
有没有办法按如下方式声明Checkbox?
CheckBox activeBox;
然后将activeBox分配给具有焦点的复选框 activeBox = ???
// Then just need to do this!
if (activeBox.Checked)
isChecked = true;
感谢您的帮助。
答案 0 :(得分:0)
是的,您可以在所有复选框中重复使用相同的功能。
void App3::ItemPage::checkBox_Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
CheckBox^ activeCheckBox = safe_cast<CheckBox^>(sender);
if (activeCheckBox->Checked)
{
if (activeCheckBox->Name == "checkBox_D1") {
//Do something when this check box is clicked.
}
if (activeCheckBox->Name == "checkBox_D2") {
//Do something when this check box is clicked.
}
}
}
答案 1 :(得分:0)
对于所有checBox,您将分配相同的CheckedChanged事件:
checkBox1.CheckedChanged += newCheckBoxCheckedOrUnchecked_CheckedChanged;
checkBox2.CheckedChanged += newCheckBoxCheckedOrUnchecked_CheckedChanged;
//...
//...
checkBox95.CheckedChanged += newCheckBoxCheckedOrUnchecked_CheckedChanged;
checkBox96.CheckedChanged += newCheckBoxCheckedOrUnchecked_CheckedChanged;
检查所有复选框的状态:
private void newCheckBoxCheckedOrUnchecked_CheckedChanged(object sender, EventArgs e)
{
foreach (Control control in this.Controls)
{
if (control.GetType() == typeof(CheckBox))
{
var checkBox = (CheckBox) control;
var checkBoxName = checkBox.Name; // To know which checkbox we are talking about
var checkBoxIsChecked = checkBox.Checked;
// Do your stuff
MessageBox.Show(checkBoxName + @" is " + (checkBoxIsChecked ? "checked" : "not checked"));
}
}
}
仅检查值已更改的复选框的状态:
private void newCheckBoxCheckedOrUnchecked_CheckedChanged(object sender, EventArgs e)
{
var checkBox2 = (CheckBox)sender;
var checkBoxName2 = checkBox2.Name; // To know which checkbox we are talking about
var checkBoxIsChecked2 = checkBox2.Checked;
// Do your stuff
MessageBox.Show(checkBoxName2 + @" is " + (checkBoxIsChecked2 ? "checked" : "not checked"));
}