2013-07-22 73 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

謝謝你的幫助。 –