2013-07-12 30 views
1

我知道有Listbox選擇索引更改問題浮動。但是,這個問題關注的是另一個問題。我有一個列表框,在表單上有一些字符串。我試圖完成的是能夠滾動列表框中的項目(,即使用箭頭鍵導航到特定項目)。一旦我導航到我想要的物品,我想要能夠按下物品上的輸入並繼續我的應用程序。所以,問題是如何確定在列表框中引發的事件類型,以便將該事件與Mouse Click事件或Keydown事件進行比較,從而允許我根據結果決定要執行的條件語句布爾表達式的原因......我需要確定類型的原因是因爲如果用戶按下selectedIndexed Item上的ENter對話框出現,那麼每當用戶突出顯示一個新項目時,就會出現對話框(您可以看到如何是個問題)。確定在列表框,選定索引更改中引發的事件類型。 C#

的僞代碼

if (Listbox_Selected_Event_EventType isEqualTo Mouse_Click) 
    { 
     // execute code 
    } else if (Listbox_Selected_Event_EventType isEqualTo KeydownEvent) 
      { 
      // execute code 
      } 

完成的代碼感謝埃文,

private void listBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (listBox1.SelectedIndex != -1) 
     { 
      if (e.KeyChar == (char)Keys.Return) 
      { 
       var file = Directory.GetFiles(urlHistoryFolder, listBox1.Text).FirstOrDefault(); 
       String line; 
       try 
       { 
        using (StreamReader sr = new StreamReader(file)) 
        { 
         line = sr.ReadToEnd(); 
        } 

        DialogResult result1 = MessageBox.Show("Are You sure you want to Load this WebService", "Important Question", MessageBoxButtons.YesNo); 
        if (result1 == DialogResult.Yes) 
        { 
         //MessageBox.Show("Loading WebService"); 
         textEndPointUri.Text = line; 
         listBox1.Visible = false; 
         GetBtn_Click(sender, e); 
        } 
       } 
       catch (Exception exp) 
       { 
        Console.WriteLine("File could not be read:"); 
        Console.WriteLine(exp.Message); 
       } 
      } 
     } 
    } 
+1

'SelectedIndexChanged'每次在ListBox中選擇一個項目時觸發。我只是單獨處理'MouseClick'和'KeyUp'事件並向兩者添加代碼以執行所需操作。事件的命名是相當邏輯的,因此找出你想處理的事情應該沒有問題。 –

+0

仍然,你必須確定是否選擇了一個項目,鼠標點擊方法觸發每次你點擊該形式..這就擊敗了目的。你基本上只是回答了我原來的問題。 – KING

+0

您可以確定是否在兩個事件處理程序中選擇或選擇哪個項目。我在下面的答案中添加了一些代碼。此外,鼠標點擊事件觸發表單上的單個控件,而不是每次單擊時控制每個控件。 'ListBox1_Click'在你點擊'ListBox'時觸發,'Form1_Click'在你點擊表格本身時觸發......只需處理單個控件的點擊。 –

回答

1

問題是你正在尋找在錯誤的事件。您應該在列表框上處理MouseClick事件和KeyUpKeyDown事件。

private void listBox1_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      //Get the selected item and do whatever you need to it 
      //Open your dialog box 

     } 
    } 

    private void listBox1_Click(object sender, MouseEventArgs e) 
    { 
     //Get the selected item and do whatever you need to it 
     //Open your dialog box 
    } 

然後,不需要有條件,因爲您已分別處理兩個事件。確保從SelectedIndexChanged事件中刪除對話框代碼。

編輯: SelectedIndexChanged每當您在ListBox對象中選擇和項目時觸發。即使您不處理該事件,該框仍會存儲索引。所以你可以在任何地方引用或操縱SelectedIndex的PROPERTY。如果您處理上述兩個事件,任何時候用戶點擊一個項目或按下回車你檢查是否是有選擇的項目:

if (listBox1.SelectedIndex != -1) 
{ 
    //Now we know you have an item selected 
    //Do some stuff 
} 
+0

它不是重點對話框。每次發生這些操作時,這些方法都會再次啓動如果我要實現這一點,並且相信我,在發佈之前我已經嘗試過了,沒有什麼會改變。我需要一種方式來告訴如果一個ITEM被選擇。這就是爲什麼我首先選擇了Selected Index Changed。 – KING

+0

沒有必要粗魯或吼叫,因爲你的外殼暗示。只要加上'if(listBox1.SelectedIndex!= -1){//我們知道某件事情被選中了}'這會告訴你如果一個ITEM被選擇 –

+0

不,我不是無禮的意思,我的朋友特別是當我是一個接受者幫幫我。我大寫這句話只是爲了表明這是不重要的。 – KING

0

要確定是否ENTER鍵被按下:

private void listBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Return) 
     // do something 
} 
1

添加一個按鈕添加到窗體並設置窗體的AcceptButton()屬性到那個按鈕。現在當按下Enter鍵時,按鈕將被觸發。在Button Click()處理程序中顯示對話框。這還帶來了額外的好處,人們也可以點擊Button而不是按Enter鍵:

private void button1_Click(object sender, EventArgs e) 
    { 
     if (ListBox.SelectedIndex != -1) 
     { 
      // ... display the dialog ... 
      Console.WriteLine(ListBox.SelectedItem.ToString()); 
     } 
    } 
+0

雖然我的標記是答案,這是OP的有用信息,並最終回答'SelectedIndex'問題。 +1 –

相關問題