C# WinForms Select 在 ComboBox_ColumnSchedule 然后打开 ComboBox_BeamSchedule

C# WinForms Select in ComboBox_ColumnSchedule then open the ComboBox_BeamSchedule

对不起 Guyz,但我会 post 在这里提供我的查询的相关代码:

                   private void InitializeComboBox(ComboBox ComboBoxX)
    {
        ComboBoxX.Size = new Size(Spacing, Spacing);
        ComboBoxX.BackColor = this.BackColor;
        ComboBoxX.DropDownStyle = ComboBoxStyle.DropDownList;
        ComboBoxX.Visible = false;
        ComboBoxX.Font = new Font("Arial Narrow", 12);
        Controls.Add(ComboBoxX);
    }

  private void ColumnInformation()
    {
        int i;

        for (i = 1; i <= NumberOfColumnLabel; i++)
        {
            ComboBox_ColumnType[i] = new ComboBox();

            InitializeComboBox(ComboBox_ColumnType[i]);
            ComboBox_ColumnType[i].Width = Label_Type.Width;
            ComboBox_ColumnType[i].Visible = true;

            ComboBox_ColumnType[i].Items.Add("A");
            ComboBox_ColumnType[i].Items.Add("B");
            ComboBox_ColumnType[i].Items.Add("C");
            ComboBox_ColumnType[i].Items.Add("D");
            ComboBox_ColumnType[i].Items.Add("E");
            ComboBox_ColumnType[i].Location = new Point(Label_Type.Location.X, Label_ColumnScheduleFirst[i].Location.Y);

            ComboBox_ColumnMirror[i] = new ComboBox();
            InitializeComboBox(ComboBox_ColumnMirror[i]);
            ComboBox_ColumnMirror[i].Width = Label_Type.Width;
            ComboBox_ColumnMirror[i].Visible = false;
            ComboBox_ColumnMirror[i].Location = new Point(Label_Mirror.Location.X, Label_ColumnScheduleFirst[i].Location.Y);
        }
        OpeningMirror();
    }


    private void OpeningMirror()
    {
        int i;
        int j;

        for (i = 1; i <= NumberOfColumnLabel; i++)
        {
               ComboBox_ColumnMirror[i].Items.Clear();
ComboBox_ColumnMirror[i].Visible = false;
            ComboBox_ColumnType[i].SelectedIndexChanged += (sender, args) =>
                {
                    if (ComboBox_ColumnType[i].SelectedItem == "D")
                    {
                        ComboBox_ColumnMirror[i].Visible = true;
                        for (j = 1; j <= 6; j++)
                        {
                            ComboBox_ColumnMirror[i].Items.Add(j);
                        }
                    }
                    else if (ComboBox_ColumnType[i].SelectedItem == "E")
                    {
                        ComboBox_ColumnMirror[i].Visible = true;
                        for (j = 1; j <= 2; j++)
                        {
                            ComboBox_ColumnMirror[i].Items.Add(j);
                        }
                    }
                    else
                    {
                        ComboBox_ColumnMirror[i].Visible = false;
                    }
                };
        }
    }

if item "D" or Item "E" selected, related combobox will open, esp. Combobox_mirror 和 visibility=true,但如果用户改变主意并且 select 项目 "A" 或 "B" 或 "C",则不会出现组合框保持隐藏,这是事件的同步。

使用 ComboBox.SelectedIndexChanged 对组合框上的更改做出反应。将 id 添加到您生成的组合框以在事件处理程序中识别它。

然后您可以根据 id 决定是否显示另一个组合框。

ComboBox_ColumnSchedule[i] = new ComboBox();
ComboBox_ColumnSchedule[i].Id = "Cbx_" + id;
ComboBox_ColumnSchedule[i].SelectedIndexChanged += ComboBox_SelectedIndexChanged;
...

private void ComboBox_SelectedIndexChanged(object sender, 
    System.EventArgs e)
{
    ComboBox comboBox = (ComboBox) sender;

    //replace with your criteria
    ComboBox_BeamSchedule.Visible = comboBox.Id == "Cbx_2";
    ...
}

试试这个(我不知道你实际有什么布局,但这可以作为工作的模板):

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        for (int i = 0; i < 10; i++)
        {
            ComboBoxPair pair = new ComboBoxPair(i*20);
            InitializeComboBoxPair(pair);
        }
    }

    private void InitializeComboBoxPair(ComboBoxPair comboBoxPair)
    {
        Controls.Add(comboBoxPair.ColumnSchedule);
        Controls.Add(comboBoxPair.BeamSchedule);
    }

}

public class ComboBoxPair
{
    public ComboBox ColumnSchedule { get; private set; }
    public ComboBox BeamSchedule { get; private set; }

    public ComboBoxPair(int top)
    {
        ColumnSchedule = new ComboBox();
        ColumnSchedule.Top = top;
        ColumnSchedule.Items.AddRange("ABCDE".Cast<object>().ToArray());
        ColumnSchedule.SelectedIndexChanged += ColumnSchedule_SelectedIndexChanged;
        BeamSchedule = new ComboBox();
        BeamSchedule.Top = top;
        BeamSchedule.Items.AddRange("ABCDE".Select(c => string.Format("{0}{0}",c)).ToArray());
        BeamSchedule.Left = ColumnSchedule.Right;
        BeamSchedule.Visible = false;
    }

    private void ColumnSchedule_SelectedIndexChanged(object sender, EventArgs e)
    {
        BeamSchedule.Visible = ColumnSchedule.SelectedIndex > -1;
    }
}