确定是否在Winforms中选中了活动复选框

时间:2017-06-21 23:40:52

标签: winforms visual-c++ checkbox focus

我正在使用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;

感谢您的帮助。

2 个答案:

答案 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"));
}