2013-07-22 199 views
2

对此很新颖,请大家帮忙。 我有以下图片点击代码。 但是,如果用户没有点击图像,则会发生错误。 我该如何做一个错误检查来捕捉,如果用户没有点击图片并尝试继续,消息框会显示通知他点击图片。C#捕捉异常

错误MSG:该错误是在“ListViewItem的将selectedItem = listView1.SelectedItems [0]错误消息:参数无效= '0' 值不是有效的关于“指数

下面是我的代码:

private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    int i = e.ProgressPercentage; 
    object fbUserObject = e.UserState; 
    if (fbUserObject is DataRow) 
    { 
     var fbUser = fbUserObject as DataRow; 
     var item = new ListViewItem(fbUser["friend_name"].ToString()); 
     item.Tag = fbUser["friend_id"]; 
     item.ImageIndex = i; 
     listView1.Items.Add(item); 
    } 
    else if (fbUserObject is Image) 
    { 
     imageList.Images.Add(fbUserObject as Image); 
    } 
} 

private void imageClicked(Object sender, System.EventArgs e) 
{ 
    ListViewItem selectedItem = listView1.SelectedItems[0]; 
    selectedFBId = selectedItem.Tag as string; 
    selectedFBName = selectedItem.Text; 

    DialogResult dialogA = MessageBox.Show("Analyse employee data?", "SOC", MessageBoxButtons.YesNo); 
    if (dialogA == DialogResult.Yes) 
    { 
     TargetEmployee.Text = "Selected Target: " + selectedFBName; 
     pf.Show(); 
     ThreadPool.QueueUserWorkItem(LoadUserDetails); 
    } 
} 
+1

发生异常的地方在哪里?在LoadUserDetails的实现中? – RQDQ

+9

你不需要捕捉异常,你需要处理该项目为空时 – Sayse

+0

哪一行给你错误? – Ehsan

回答

3

改变像你这个代码

private void imageClicked(Object sender, System.EventArgs e) 
    { 
     if(listView1.SelectedItems.Count < 1) 
       return; 
     ListViewItem selectedItem = listView1.SelectedItems[0]; 
     selectedFBId = selectedItem.Tag as string; 
     selectedFBName = selectedItem.Text; 

     DialogResult dialogA = MessageBox.Show("Analyse employee data?", "SOC", MessageBoxButtons.YesNo); 
     if (dialogA == DialogResult.Yes) 
     { 
      TargetEmployee.Text = "Selected Target: " + selectedFBName; 
      pf.Show(); 
      ThreadPool.QueueUserWorkItem(LoadUserDetails); 
     } 
    } 
+0

错误是在“ListViewItem selectedItem = listView1.SelectedItems [0]错误消息:无效参数='0'的值是无效'索引 –

+0

@SamuelLee你应该使用支票,因为我已经在我的代码中提到过了if(listView1.SelectedItems.Count <1) return; – Ehsan

+0

Works,thanks!返回的结果是什么? –

1

您可以使用try { } catch { }语句错误处理。

一旦你找到的代码生成异常的线路,你可以把它包装成块这样

try 
{ 
    int a = int.Parse("pedantic"); // This throws an error because you cannot convert 
} 
catch (Exception e) 
{ 
    // Handle your error here instead of crashing your program 
} 
+3

这甚至没有编译(“由常量零除”) – Sayse

+0

@Sayse他刚刚给出了一个如何处理异常的例子。他也评论说。 – Ehsan

+0

@EhsanUllah - 我只是挑剔,通常的例子应该编译,以便OP可以尝试它们,如果需要的话,如果我更挑剔我会说一些关于捕捉'Exception'的东西,但我可以看到SLC尝试了什么去做。我在其他评论中说过为什么我不认为这也是正确的 – Sayse

4

你不应该捕捉异常,当没有任何选定的项目

if(listView1.SelectedItems.Count == 0) 
{ 
MessageBox.Show(this, "No image"); 
return; 
} 

异常应该被捕获时,你不应该处理如果你意识到可能发生的问题,你不会期望发生什么,你应该在问题发生之前处理它

+0

(返回退出你的方法) – Sayse

+0

谢谢你的帮助。 –