如何使用启用禁用状态

时间:2016-08-17 17:35:35

标签: c# winforms combobox

我花了很多时间试图解决这个问题。 我有3个组合框,我试图在表单加载时首先处于活动状态,其余部分处于非活动状态。 当在第一个cmb中选择值(双重类型)时,第二个被激活并且第一个变为非活动状态,而在第二个中选择该值并且第一个保持不活动而第二个变为非活动,在从第三个组合框中选择值之后激活第三个激活,其余部分处于非活动状态,直到选择再次开始。

这是在WINDOWS FORMS上

我尝试使用循环,但很快变得非常复杂:-( 我希望这很清楚: - )

谢谢

2 个答案:

答案 0 :(得分:0)

您需要使用事件,例如SelectionChangeCommitted。事件处理程序用于在满足某些条件时自动调用方法,因此允许您执行某些条件操作而无需轮询循环。这是一个应该做你正在寻找的例子,虽然它会使一些非用户友好的gui。

public partial class ExampleForm : Form
{
    public ExampleForm()
    {
        InitializeComponent();

        comboBox1.Enabled = true;
        comboBox2.Enabled = false;
        comboBox3.Enabled = false;

        comboBox1.Items.Add("option1");
        comboBox1.Items.Add("option2");

        comboBox2.Items.Add("option1");
        comboBox2.Items.Add("option2");

        comboBox3.Items.Add("option1");
        comboBox3.Items.Add("option2");

        comboBox1.OnSelectedIndexChanged += comboBox1_OnSelectedIndexChanged;
        comboBox2.OnSelectedIndexChanged += comboBox2_OnSelectedIndexChanged;
        comboBox3.OnSelectedIndexChanged += comboBox3_OnSelectedIndexChanged;
    }

    void comboBox1_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        comboBox1.Enabled = false;
        comboBox2.Enabled = true;
    }

    void comboBox2_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        comboBox2.Enabled = false;
        comboBox3.Enabled = true;
    }

    void comboBox3_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        comboBox1.Enabled = true;
        comboBox3.Enabled = false;
    }
}

答案 1 :(得分:0)

我为组合框创建了一个数组,并且所有3个都使用相同的SelectedIndexChanged处理程序:

// List the combo boxes in the order you want them to enable.
ComboBox[] _boxes = { comboBox1, comboBox2, comboBox3 };

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    int index = Array.IndexOf(_boxes, (ComboBox)sender);

    // Disable the combo box that just got its value selected.
    _boxes[index].Enabled = false;

    // If it's not the last combo box in the array, enable the next one.
    if(index < _boxes.Length - 1)
        _boxes[index + 1].Enabled = true;
}

然后你只需要设置组合框的初始状态,以便第一个启用,另外两个不启用。

这也很容易扩展。如果您决定向流添加另一个组合框,则只需将其添加到_boxes数组中。

相关问题