2013-08-05 4 views
4

У меня есть список и кнопка в моей форме. Список содержит 3 элемента: House, People, Outdoor. Я также создал 3 формы для представления значений из списка.Открыть новую форму после выбора пункта в списке

Я хотел бы, чтобы пользователь выделил элемент в списке, и после нажатия кнопки я хотел бы открыть форму, выбранную пользователем.

Как я могу это достичь? Я пробовал эту ссылку: Calling new Form by clicking an item on the ListBox, но безуспешно.

Я попытался:

public Select() 
     { 
      InitializeComponent(); 
      listBox1.Click += OnListBoxItemClick; 
     } 


     private void OnListBoxItemClick(object sender, EventArgs e) 
     { 
      var form2 = new House(); 
      House.ShowDialog(); 
     } 
  1. Это только позволит мне открыть одну форму. Как я могу назначить разные формы для открытия с разными значениями из списка?
  2. Я бы хотел, чтобы форма открывалась после того, как я нажимаю кнопку, а не значение в списке, как ее достичь?
+4

Можете ли вы после того, что вы пытались и какие проблемы вы столкнулись с? –

+1

Что значит «без успеха»? Все, что вам нужно сделать, это связать обработчик событий и вызвать Show (или ShowDialog), поскольку связанный с ним вопрос отображается. Что не так? –

+2

Должно быть 'form2.ShowDialog();'. См. Пример Марка для разных форм. – LarsTech

ответ

4

Вам нужно будет использовать в ListBox в SelectedItem недвижимости:

private void button1_Click(object sender, EventArgs e) 
{ 
    switch (listBox1.SelectedItem.ToString()) 
    { 
     case "House": 
      House h = new House(); 
      h.ShowDialog(); 
      break; 
     case "People": 
      People p = new People(); 
      p.ShowDialog(); 
      break; 
     case "Outdoor": 
      Outdoor o = new Outdoor(); 
      o.ShowDialog(); 
      break; 
    } 

} 
+0

Я пробовал, но ничего не происходит. Нет ошибок, но результатов нет – jaspernorth

+0

@jaspernorth вы пытались вставить точки останова в оператор switch, чтобы узнать, что такое '' SelectedItem''? – jszigeti

+0

Я попытался вставить MessageBox.Show (listBox1.SelectedItem.ToString()); в верхней части button1_Click, но опять же ничего не происходит. Нужно ли его инициализировать каким-то образом? – jaspernorth

0

Вы можете использовать Dictionary для отображения значений в выбранных элементов для форм, или же, возможно, лучше функции, которые могут создать форму (для обеспечения ленивой загрузки).

private Dictionary<string, Func<Form>> formMapping 
    = new Dictionary<string, Func<Form>>() 
    { 
     {"House",()=> new House()}, 
     {"People",()=> new People()}, 
     {"Outdoor",()=> new Outdoor()}, 
    }; 

Затем вы можете использовать это отображение в обработчик события щелчка, чтобы перевести выбранное значение в форму:

private void button1_Click(object sender, EventArgs e) 
{ 
    Form newForm = formMapping[listBox1.SelectedValue](); 
    newForm.ShowDialog(); 
}