views:

371

answers:

4

Hi,

Is there a way to programmatically generate a click event on a CheckBox? I am looking for an equivalent to Button.PerformClick();

+1  A: 

Why do you need to simulate a click, doesn't this line of code fits your need?

myCheckBox.Checked = !myCheckBox.Checked;

If you need to execute logic when the state of the CheckBox change, you should use CheckedChanged event instead of Click.

private void CheckBox1_CheckedChanged(Object sender, EventArgs e)
{
   MessageBox.Show("You are in the CheckBox.CheckedChanged event.");
}
SelflessCoder
I posted this but the question says "click event". This won't generate a click event.
Matt Breckon
Maybe I will refactor the control and use the CheckedChanged event... whatever will be easier.
Grzenio
+1  A: 

I'm still setting up a new workstation so I can't research this properly at the moment, but with UI Automation maybe it's possible that the checkbox supports the IInvokeProvider and you can use the Invoke method?

scwagner
A: 

I don't think you can generate a click event in that way without calling the checkBox_Click event handler directly. But you can do this:

checkBox.Checked = !checkBox.Checked;

The CheckedChanged handler will still be called even if you do this.

Mark Byers
+2  A: 

Why do you want to generate a click event on the CheckBox?

If you want to toggle it's value:

theCheckBox.Checked = !theCheckBox.Checked;

If you want to trigger some functionality that is connected to the Click event, it's a better idea to move the code out from the Click event handler into a separate method that can be called from anywhere:

private void theCheckBox_Click(object sender, EventArgs e)
{
    HandleCheckBoxClick((CheckBox)sender);
}

private void HandleCheckBoxClick(CheckBox sender)
{
    // do what is needed here
}

When you design your code like that, you can easily invoke the functionality from anywhere:

HandleCheckBoxClick(theCheckBox);

The same approach can (and perhaps should) be used for most control event handlers; move as much code as possible out from event handlers and into methods that are more reusable.

Fredrik Mörk
I am trying to tests a nasty Form, that enables some of the containing controls in the ..._Click event handler.
Grzenio
Just be careful - you don't want to call this method from theCheckBox_Click AND theCheckBox_CheckedChanged as it will be called twice when the check box is clicked.
Philip Wallace
@Grzenio: enabling/disabling controls in the `Click` even of a CheckBox is not a good idea; what if the `Checked` property is assigned by code? That does not trigger the `Click` event, and the UI will be in an inconsistent state. You should probably let that code be executed as a result of the `CheckedChanged` event instead.
Fredrik Mörk
Changed to CheckedChanged event, cheers.
Grzenio