我花了很多时间试图解决这个问题。 我有3个组合框,我试图在表单加载时首先处于活动状态,其余部分处于非活动状态。 当在第一个cmb中选择值(双重类型)时,第二个被激活并且第一个变为非活动状态,而在第二个中选择该值并且第一个保持不活动而第二个变为非活动,在从第三个组合框中选择值之后激活第三个激活,其余部分处于非活动状态,直到选择再次开始。
这是在WINDOWS FORMS上
我尝试使用循环,但很快变得非常复杂:-( 我希望这很清楚: - )
谢谢
答案 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
数组中。