确定是否在Winforms中选中活动复选框 我在VisualC++中使用VisualStudio开发了一个Windows窗体应用程序。我的表格上有96个复选框。我相信有一种方法可以创建单击任何复选框时调用的单击事件,而不是创建96个单击事件。在Click事件中,我需要确定是否选中了active复选框。虽然这应该很容易,但我似乎不明白

确定是否在Winforms中选中活动复选框 我在VisualC++中使用VisualStudio开发了一个Windows窗体应用程序。我的表格上有96个复选框。我相信有一种方法可以创建单击任何复选框时调用的单击事件,而不是创建96个单击事件。在Click事件中,我需要确定是否选中了active复选框。虽然这应该很容易,但我似乎不明白,winforms,visual-c++,checkbox,focus,Winforms,Visual C++,Checkbox,Focus,我得到了下面的代码,但我相信有更好的方法 if (sender == checkBox_D1) { if (checkBox_D1->Checked) isChecked = true; } else if (sender == checkBox_D2) { if (checkBox_D2->Checked) isChecked = true; }

我得到了下面的代码,但我相信有更好的方法

    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对象,所以它不起作用

控件^activeCheckBox=ActiveControl

activeCheckBox->Text返回复选框的文本属性

activeCheckBox->Checked不编译。错误为“已检查”:不是“System::Windows::Forms::Control”的成员

似乎发件人有我需要的数据,但我不知道如何访问它

是否有如下方法声明复选框

复选框激活框

然后将activeBox指定给具有焦点的复选框 activeBox=

// Then just need to do this!
if (activeBox.Checked)
    isChecked = true;

谢谢您的帮助。

是的,您可以对所有复选框重复使用相同的功能

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.
        }
    }
}
void App3::ItemPage::checkBox\u选中(平台::对象^sender,Windows::UI::Xaml::路由目标^e)
{
复选框^activeCheckBox=safe\u cast(发送方);
如果(活动复选框->选中)
{
如果(activeCheckBox->Name==“checkBox\u D1”){
//单击此复选框时执行某些操作。
}
如果(activeCheckBox->Name==“checkBox\u D2”){
//单击此复选框时执行某些操作。
}
}
}

对于所有复选框,您将分配相同的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"));
}

嗨,EJD,谢谢你看我的问题和你的回答。我编译CheckBox activeCheckBox=(CheckBox)sender时出错;在您的示例中,发送方作为类型对象传递。我正在使用Winforms,发送方作为System::Object^传递。错误为C2440和C3673。谢谢怎么了?我没有注意到您使用的是visual-++您仍然需要将发件人强制转换为复选框。我收到两个错误:C2440:“类型强制转换”:无法从“System::Object^”转换为“System::Windows::Forms::CheckBox”1>转换需要构造函数或用户定义的转换运算符,它不能被COSTRYCAST或RealTytCaseCalpC36C33::St::Windows::窗体::复选框:类没有复制结构,将代码修改为VisualC++,让我知道我是如何执行我的第一个代码的:)它工作!非常感谢你!你现在已经毕业到C++ LOL了,我只需要对代码做一个小小的修改。如果(活动复选框->选中)。。。IsChecked是VisualBasic。该键是将发件人强制转换为复选框的正确方法。非常感谢。嗨,伊莎贝拉,谢谢你的建议。它看起来像Visual Basic?我用的是C++。这不是主要问题。我就是不明白你的密码o) 我将尝试解决这个问题,但是我认为我将遇到与EJD建议相同的问题,因为您在示例中将控件强制转换为type CheckBox,而编译器不喜欢这种强制转换。非常感谢。我的代码可以工作,但它是一个非常长的函数,因为它有96个if/else if语句。如果我只知道如何访问System::Object^sender中的Checkbox->Checked属性,我可以将函数压缩为几行。这可能吗?如果没有,我将使用现有代码。非常感谢。