escargot agile
escargot agile

Reputation: 22379

Binding between controls in Windows Forms

Is there a way to make a control dependent on another control? I have a combo box and a button, and I need the button to be enabled if and only if there is an item selected in the combo box.

I know I can set the Enabled property of the button inside the SelectedIndexChanged callback, but then it will require some code, and besides there's an issue with what initial state the button would have. So I'm looking for something that wouldn't require manually handing events, is this possible?

Thanks!

Upvotes: 1

Views: 520

Answers (1)

Fredrik Mörk
Fredrik Mörk

Reputation: 158309

No, there is no way in winforms to do this without code. What I usually do is to collect all such state-setting code into one specific method:

private void SetControlStates()
{
    theButton.Enabled = theComboBox.SelectedIndex >= 0;
    // code for other controls follow here
}

Then I trigger this method from all over the place, as soon as there is an interaction that may lead to the state changing (including the last thing I do when the form has finished loading; that takes care of initial state). If you want to avoid unnecessary assignments, just add code to check the value first:

private void SetControlStates()
{
    bool buttonEnabled = theComboBox.SelectedIndex >= 0;
    if (theButton.Enabled != buttonEnabled) theButton.Enabled = buttonEnabled;
    // code for other controls follow here
}

Upvotes: 1

Related Questions