2013-08-05 116 views
4

我在窗體上有一個列表框和一個按鈕。列表框包含3個元素:房屋,人,戶外。 我也創建了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();'。請參閱Mark的示例以瞭解不同的形式。 – 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(); 
} 
相關問題