2011-12-02 51 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的索引。