简体   繁体   中英

How to make visible another combo box on selection of a value in current combo box?

I have a combobox(CB1) and it contains items like 1,2,3 and i want to make another combobox (CB2) visible when i select the value 3 from CB1 . Which property should i user. I am working on a windows based application and I am using C# as the code behind language. An example would be great to solve the problem. The combo box CBFormat consists of a list of items as follows:

var allWiegandFormat = WiegandConfigManager.RetrieveAllWiegandFormats();
            var allWiegandList = new List<IWiegand>(allWiegandFormat);

            CBFormat.Items.Add(allWiegandList[0].Id);
            CBFormat.Items.Add(allWiegandList[3].Id);
            CBFormat.Items.Add(allWiegandList[4].Id);
            CBFormat.Items.Add(allWiegandList[5].Id);

            CBProxCardMode.Items.Add(ProxCardMode.Three);
            CBProxCardMode.Items.Add(ProxCardMode.Five);

Now I want to show the Combo box of CBPorxCardMode when i select the second item from CBFormat combo box.

Try this

Private void CB1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    Combobox CB = (ComboBox) sender;
    if(CB.SelectedIndex != -1)
    {
        int x = Convert.ToInt32(CB.Text)
        if(x == 3)
        {
          CB2.Visible = True;
        }
    }
}

Use SelectionChangeCommitted event and subscribe your CB1 to it:

// In form load or form initialization
cb1.SelectionChangeCommitted += ComboBoxSelectionChangeCommitted;

// Event
private void ComboBoxSelectionChangeCommitted(object sender, EventArgs e)
{
    cb2.Visible = cb1.SelectedItem != null && cb1.Text == "3";
}

Start with the CB2 Visible property set to False and add a event handler code for the SelectedIndexChanged on the CB1 through the WinForms designer

private void ComboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    ComboBox comboBox = (ComboBox) sender;
    if(comboBox.SelectedItem != null)
    {
        int id = Convert.ToInt32(comboBox.SelectedItem)
        cbo2.Visible = (id == 3)
    }
}

This is supposing the ID, that you are adding at the first combo, is an Integer value as it seems.
Also rembember that SelectedIndexChanged event will be called even if you change the SelectedItem programmatically and not just when the user changes the value. Also, if the user change again the selection moving away from the ID==3 the method will set again the Cbo2 not visible.

If it is Winforms You can use Something Like this

    private void Form1_Load(object sender, EventArgs e)
    {
            comboBox1.Items.Add(1);
            comboBox1.Items.Add(2);
            comboBox1.Items.Add(3);
            comboBox2.Visible = false;
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBox1.SelectedItem.ToString() == "3")
        {
            comboBox2.Visible = true;
        }
        else
        {
            comboBox2.Visible = false;
        }
    }

Hope this helps.,

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM