Способ решить - осознать, в какую функцию вы помещаете свои заявления.Настройки комбинированного списка (диапазон, местоположение и т. Д.) Будут в функции 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()
, иначе он добавит диапазон нового экземпляра комбинированного списка к старому.