Добавлять комбобокс динамически с флажком - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь добавить комбинированный список, когда установлен флажок.

Код, который я использую, приведен ниже.В его нынешнем виде я могу заставить его перемещаться по уже существующему комбинированному списку, но он не создаст новый.

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        // Determine the CheckState of the check box.  
        if (checkBox1.CheckState == CheckState.Checked)
        {  

            combo.Items.AddRange(new object[] {
                "Item 1",
                "Item 2",
                "Item 3",
                "Item 4",
                "item 5",
                "Item 6"});
            combo.Location = new System.Drawing.Point(19, 123);
            combo.Name = "combo";
            combo.Size = new System.Drawing.Size(121, 21);
            combo.TabIndex = 0;
            combo.SelectedIndexChanged += new System.EventHandler(this.combo_SelectedIndexChanged);
            combo.BringToFront();

            this.AllowDrop = false;
        }
    }

    private void checkBox1_Click(object sender, System.EventArgs e)
    {
        switch (checkBox1.CheckState)
        {
            case CheckState.Checked:
                ComboBox combo = new ComboBox();
                Controls.Add(combo);
                break;
            case CheckState.Unchecked:

                break;
            case CheckState.Indeterminate:

                break;
        }
    }

1 Ответ

0 голосов
/ 12 февраля 2019

Способ решить - осознать, в какую функцию вы помещаете свои заявления.Настройки комбинированного списка (диапазон, местоположение и т. Д.) Будут в функции CheckChanged при условии if checked.Они будут идти вместе с groupbox.controls.add(); и combo.BringToFront();, на тот случай, если он окажется за чем-то.

private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        // Determine the CheckState of the check box.  
        if (checkBox1.CheckState == CheckState.Checked)
        {
            groupBox1.Controls.Add(combo);
            combo.Items.AddRange(new object[] {
                "Item 1",
                "Item 2",
                "Item 3",
                "Item 4",
                "Item 5",
                "Item 6"});
            combo.Location = new System.Drawing.Point(19, 123);
            combo.Name = "combo";
            combo.Size = new System.Drawing.Size(121, 21);
            combo.TabIndex = 0;
            combo.SelectedIndexChanged += new System.EventHandler(this.combo_SelectedIndexChanged);
            combo.BringToFront();

            this.AllowDrop = false;
}

Между тем, в функции Click вы должны создать экземпляр комбинированного списка и добавить его.

    private void checkBox1_Click(object sender, System.EventArgs e)
    {
        switch (checkBox1.CheckState)
        {
            case CheckState.Checked:
                ComboBox combo = new ComboBox();
                Controls.Add(combo);
                break;
            case CheckState.Unchecked:

                break;
            case CheckState.Indeterminate:

                break;
        }
    }

Если после снятия флажка вы хотите избавиться от поля со списком, просто добавьте

        if (checkBox1.CheckState == CheckState.Unchecked)
        {
            groupBox1.Controls.Remove(combo);
            Controls.Remove(combo);
            combo.Items.Clear();
        }

в функцию private void checkBox1_CheckedChanged(object sender, EventArgs e).Обязательно укажите combo.items.Clear(), иначе он добавит диапазон нового экземпляра комбинированного списка к старому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...