WinForms-根据组合框选择动态创建文本框

时间:2020-05-06 05:58:09

标签: c# winforms combobox textbox

我正在尝试根据以下步骤基于TextBox上的选择动态创建一个ComboBox

第一步(从ComboBox中选择一个来源):

1st SS

第二步(应基于Textbox出现ComboBox.SelectedValue):

2ND SS

最后一步(新的ComboBox将显示在下面):

enter image description here

我使用以下代码创建了createTextBox函数:

public void createTextBox(int numPassenger)
{
    TextBox[] passengerBoxes = new TextBox[numPassenger];

    for (int u = 0; u < passengerBoxes.Count(); u++)
    {
        passengerBoxes[u] = new TextBox();
    }
    int i = 0;
    foreach (TextBox txt in passengerBoxes)
    {
        string name = "passenger" + i.ToString();

        txt.Name = name;
        txt.Text = name;
        txt.Location = new Point(244, 32 + (i * 28));
        txt.Visible = true;
        this.Controls.Add(txt);
        i++;
    }
}

有没有一种方法可以修改当前功能以适应上述步骤?另外,如何找到动态创建的TextBox

1 个答案:

答案 0 :(得分:0)

您可以尝试以下代码:

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        createTextBox(sender as ComboBox);
    }
    private void createTextBox(ComboBox cmb)
    {
        TextBox passengerBoxes = new TextBox();
        string name = cmb.Text;
        if (Controls.Find(name, true).Length == 0)
        {
            passengerBoxes.Name = name;
            passengerBoxes.Text = name;
            int textBoxCount = GetTextBoxCount();
            passengerBoxes.Location = new Point(244, 32 + (textBoxCount * 28));
            passengerBoxes.Visible = true;
            this.Controls.Add(passengerBoxes);

            if (cmb.Items.Count != 1)//last item remaining then we should not create new combo box
            {
                ComboBox newCombo = new ComboBox
                {
                    Location = new Point(cmb.Location.X, 32 + ((textBoxCount + 1) * 28))
                };

                foreach (string str in cmb.Items)
                    if (cmb.Text != str)
                        newCombo.Items.Add(str);

                newCombo.SelectedIndexChanged += comboBox1_SelectedIndexChanged;

                this.Controls.Add(newCombo);
            }
        }
        else
            MessageBox.Show("Textbox Already for the selected source " + name);
    }

    private int GetTextBoxCount()
    {
        int i = 0;
        foreach (Control ctl in this.Controls)
        {
            if (ctl is TextBox) i++;
        }
        return i;
    }
相关问题