2011-12-02 54 views
1

'參數超出範圍未處理',c#參數超出範圍未處理當單擊按鈕時由於沒有編號或沒有選擇此客戶端連接的索引號而出現錯誤。錯誤顯示此代碼:由於SelectedIndex

workerSocket = (Socket)m_workerSocketList[comboBox1.SelectedIndex]; 

我想給一個消息框說'請選擇一個正確的數字'。應該編碼來處理這個錯誤?

這裏是代碼:

void indmsgbtn_Click(object sender, EventArgs e) 
{ 
    string msg = richtxtindmsg.Text; 
    msg = "Private Admin Message: " + msg + "\n"; 
    byte[] byData = System.Text.Encoding.ASCII.GetBytes(msg); 
    Socket workerSocket = null; 
    // for (int i = 0; i < m_workerSocketList.Count; i++) 

    workerSocket = (Socket)m_workerSocketList[comboBox1.SelectedIndex]; 

    if (workerSocket != null) 
    { 
     if (workerSocket.Connected) 
     { 
      workerSocket.Send(byData); 
     } 
    }  
} 
+2

什麼是例外?你如何處理連接/重新連接? – esskar

+0

你如何填充'comboBox1'?可能更好地控制您的控件的人口更優雅,而不是檢查無效的索引。 –

回答

0

你可以嘗試:

if (comboBox1.SelectedIndex > -1 && comboBox1.SelectedIndex < m_workerSocketList.Count) 
{ 
    workerSocket = (Socket)m_workerSocketList[comboBox1.SelectedIndex]; 
} 
else 
{ 
    //message 
} 
+0

-1,因爲這不會處理索引可能超過'm_workerSocketList'中元素數目的情況。您需要擴展您的答案以檢查是否存在這種情況,即通過爲檢查「SelectedIndex」低於「m_workerSocketList」計數的「if」語句添加第二個條件。 –

+0

@刀鋒好點。謝謝,我已經更新了答案。 – Louis

2

在致電workerSocket = (Socket)m_workerSocketList[comboBox1.SelectedIndex];你需要檢查的comboBox1.SelectedIndex值。如果超出範圍,請顯示錯誤消息;只有在範圍內(>= 0< m_workerSocketList.Count),才能安全地用作m_workerSocketList的索引。