2013-03-13 44 views
0

在列表框中選擇的數據:錯誤在我使用下面的代碼顯示在文本框中

private void listBox1_MouseClick(object sender, MouseEventArgs e) 
{ 
    txtFrom.Clear(); 
    txtSubject.Clear(); 
    txtBody.Clear(); 
    something = this.listBox1.SelectedIndex.ToString(); 

    int something1 = Convert.ToInt32(something); 

    foreach (MailMessage email in messages) 
    { 
     count++; 
     if (count == something1) 
     { 
      txtFrom.Text = email.From.ToString(); 
      txtSubject.Text = email.Subject.ToString(); 
      txtBody.Text = email.Body.ToString(); 
     } 
    } 

的問題是,當我選擇其他項目,txtFrom.Text,txtSubject.Text,txtBody的價值。文本,不要根據在列表框中選擇的新值進行更改。

回答

0

MouseClick事件不是您想要處理的事件,如果您在選擇更改時有興趣學習。無論用戶是否進行選擇,用戶每次點擊控件時都會觸發事件MouseClick。有幾種方法可以在不使用鼠標的情況下在列表框中選擇一個項目,例如,我可以使用鍵盤上的箭頭鍵更改選擇內容。 (如果這還不足以說服你,我提請您注意的documentation,其中說,MouseClick事件「支持.NET Framework基礎結構,不適合直接在代碼中使用」。)

相反,你會想切換到處理SelectedIndexChanged事件。每當SelectedIndex屬性(或多選列表框的SelectedIndices集合)發生更改時,該事件將會上升,每當進行選擇/更改時都會自動發生。

你真的甚至不進行任何其他更改您的代碼:當我運行裏面listBox1_SelectedIndexChanged代碼

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    txtFrom.Clear(); 
    txtSubject.Clear(); 
    txtBody.Clear(); 
    something = this.listBox1.SelectedIndex.ToString(); 

    int something1 = Convert.ToInt32(something); 

    foreach (MailMessage email in messages) 
    { 
     count++; 
     if (count == something1) 
     { 
      txtFrom.Text = email.From.ToString(); 
      txtSubject.Text = email.Subject.ToString(); 
      txtBody.Text = email.Body.ToString(); 
     } 
    } 
} 
+0

沒有任何反應,所以我只好用鼠標點擊事件。 – iyerrama25 2013-03-13 12:28:20

+0

@ iyerrama25然後你沒有正確地連接事件處理程序。每次選擇更改時都會引發此事件。文件保證了這一點。事實上,我鏈接到的文檔甚至說:「當您需要根據ListBox中的當前選擇顯示其他控件中的信息時,這會很有用。您可以使用此事件的事件處理程序將信息加載到其他控件中控制「。使用'MouseClick'不是一個選項,因爲它不起作用。你已經學到了很多東西。你需要弄清楚爲什麼'SelectedIndexChanged'沒有得到提升。 – 2013-03-13 12:35:37

+0

它可能是因爲,沒有任何索引要比較以檢測索引中的任何更改,我想是 – iyerrama25 2013-03-15 19:37:18