判断Winforms中active复选框是否被选中
Determine whether the active check box is checked in Winforms
我正在 Visual C++ 中使用 Visual Studio 开发一个 Windows 表单应用程序。我的表单上有 96 个复选框。与其创建 96 个 Click 事件,我相信有一种方法可以创建一个在单击任何复选框时调用的 Click 事件。在 Click 事件中,我需要确定活动复选框是已选中还是未选中。虽然这应该很容易,但我似乎无法弄明白!
我用下面的代码让它工作,但我确信有更好的方法。
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 returns Checkbox 的 Text 属性
activeCheckBox->Checked 不编译。错误是 'Checked' : 不是 'System::Windows::Forms::Control'
的成员
发件人似乎有我需要的数据,但我不知道如何访问它。
有没有办法像下面这样声明一个复选框?
复选框活动框;
然后将activeBox赋给获得焦点的Checkbox
活动框 = ???
// 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.
}
}
}
对于所有 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"));
}
我正在 Visual C++ 中使用 Visual Studio 开发一个 Windows 表单应用程序。我的表单上有 96 个复选框。与其创建 96 个 Click 事件,我相信有一种方法可以创建一个在单击任何复选框时调用的 Click 事件。在 Click 事件中,我需要确定活动复选框是已选中还是未选中。虽然这应该很容易,但我似乎无法弄明白!
我用下面的代码让它工作,但我确信有更好的方法。
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 returns Checkbox 的 Text 属性
activeCheckBox->Checked 不编译。错误是 'Checked' : 不是 'System::Windows::Forms::Control'
的成员发件人似乎有我需要的数据,但我不知道如何访问它。
有没有办法像下面这样声明一个复选框?
复选框活动框;
然后将activeBox赋给获得焦点的Checkbox 活动框 = ???
// 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.
}
}
}
对于所有 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"));
}