2013-09-24 6 views
0

Я разрабатываю приложение для форм Windows. В этом приложении пользователь выбирает номер из выпадающего списка, а затем в зависимости от числа создаются некоторые динамические элементы управления (метки и выпадающие списки).Динамически созданное событие SelectedIndexChanged Combobox

Моя проблема в том, что мне нужно написать код для этих динамически созданных событий comboboxs "selectedindexchanged". Но я не знаю, как создать событие для динамического combobox.

Вот моя функция:

Form1.cs

public void getchildCntrl(Panel pnl,ComboBox cmbb) 
     { 
      for (int ix = pnl.Controls.Count - 1; ix >= 0; ix--) 
       if (pnl.Controls[ix].Name.Substring(0, 5) == "Child") pnl.Controls[ix].Dispose(); 

      if (cmbb.SelectedIndex != 0) 
      { 
       Label[] childLabels = new Label[cmbb.SelectedIndex]; 
       ComboBox[] txtTeamNames = new ComboBox[cmbb.SelectedIndex]; 
       for (int i = 0; i < txtTeamNames.Length; i++) 
       { 
        //label create 
        var lbl = new Label(); 
        childLabels[i] = lbl; 
        lbl.Name = "ChildLb" + i.ToString(); 
        lbl.Text = (i + 1).ToString() + ". Çocuk-Yaş :"; 
        lbl.Width = 80; 
        lbl.Location = new Point(cmbb.Location.X - 85, cmbb.Location.Y + 7 + ((i + 1) * 28)); 
        lbl.Visible = true; 
        pnl.Controls.Add(lbl); 

        //combobox create 
        var cmb = new ComboBox(); 
        txtTeamNames[i] = cmb; 
        cmb.Name = "Child" + i.ToString(); 
        cmb.Location = new Point(cmbb.Location.X, cmbb.Location.Y + 5 + ((i + 1) * 28)); 
        cmb.Width = 40; 
        cmb.DropDownStyle = ComboBoxStyle.DropDownList; 
        cmb.DataSource = ages.ToArray(); 
        cmb.Visible = true; 
        pnl.Controls.Add(cmb); 
       } 
      } 
     } 

ответ

2

Вы просто зарегистрироваться событие, подобное ниже ...

cmb.SelectedIndexChanged += new System.EventHandler((object o, EventArgs e) => 
{ 
    //Do something here 
}); 

Или

cmb.SelectedIndexChanged += new System.EventHandler(cmb_SelectedValueChanged); 

private void cmb_SelectedValueChanged(object sender, EventArgs e) 
{ 
    //Do something here. 
} 
1

хендлер Регистрация событий таким образом:

cmb.SelectedIndexChanged+=new EventHandler(cmb_SelectedIndexChanged); 

Разрегистрировать таким образом:

cmb.SelectedIndexChanged-=new EventHandler(cmb_SelectedIndexChanged); 

private void cmb_SelectedIndexChanged(object sender, System.EventArgs e) 
{ 
    //write your event code here 
} 

How to: Create Event Handlers at Run Time for Windows Forms

public void getchildCntrl(Panel pnl,ComboBox cmbb) 
    { 

//// your code..... 
       //combobox create 
       var cmb = new ComboBox(); 
       cmb.SelectedIndexChanged+=new EventHandler(cmb_SelectedIndexChanged); 
// remaining code 
       cmb.Visible = true; 
       pnl.Controls.Add(cmb); 
      } 
     } 
    } 

Для задания параметров - пройти:

ComboBox.SelectedIndexChanged Event

+0

Ошибка: Имя «cmb_SelectedIndexChanged» не существует в текущем контексте – AloneInTheDark

+0

Смотрите мой полный ответ. – Sadique

+1

@AloneInTheDark 'cmb_SelectedIndexChanged' - это отдельный метод обработки события. См. Мой ответ –

1

Вы можете подключить обработчик события к ComboBox, как это:

cmd.SelectionChanged += new SelectionChangedEventHandler(GuiController_SelectionChanged); 

void GuiController_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    throw new NotImplementedException(); 
} 
Смежные вопросы