2015-04-03 39 views
0

當我單擊第二次時,下面的方法給出ArgumentOutOfRangeException錯誤,並且說索引0不是有效索引。單擊第二次時ListViewItem的ArgumentOutOfRangeException

在第一次點擊它的作品!?

ListView FullRowSelect設置爲true。

我看到這發生在按ALT鍵和CONTROL鍵時。如果我不按下這些鍵就點擊它不會產生錯誤,或者如果在點擊第二次之前點擊空行,它不會給出錯誤。

有沒有辦法使用這些按鍵組合並單擊多個然後一次?

private void MultipleToText(object sender, MouseEventArgs e) 
    { 
     if (li.SelectedItems.Count <0) 
      return; 
     int SetIndex = li.FocusedItem.Index; 
     if (Control.ModifierKeys == (Keys.Alt|Keys.Control)) 
     { 
      ListViewItem lvi = li.SelectedItems[0]; // Error happens there 
      DialogResult res = MessageBox.Show(lvi.SubItems[0].Text + " will be deleted. Continue ?", "", MessageBoxButtons.YesNo); 
      if (res == DialogResult.No) 
       return; 
      li.Items.Remove(li.SelectedItems[0]); 
      RemoveThisItem(SetIndex); 
     } 
     else if (Control.ModifierKeys == Keys.None) 
     { 
      ListViewItem lvi = li.SelectedItems[0]; 
      DialogResult res = MessageBox.Show("Change the entry " + lvi.SubItems[0].Text + " ?", "", MessageBoxButtons.YesNo); 
      if (res == DialogResult.No) 
       return; 
      li.Items.Remove(li.SelectedItems[0]); 
      for (int i = 0; i < 17; ++i) 
       _textBox[i].Text = lvi.SubItems[i].Text; 
      RemoveThisItem(SetIndex); 
     } 
    } 

回答

1

你得到,因爲你的第一個錯誤if語句將永遠不會evalute爲true(和返回),因爲數將永遠也不能低於0。由於這一點,即使你的列表是空仍嘗試刪除第一個元素,拋出一個ArgumentOutOfRangeException。

你的if語句應該改爲檢查,如果它等於0,因爲這樣的:當你按下除Alt鍵/控制任何東西,因爲你不處理事件比其他任何按鍵

if (li.SelectedItems.Count == 0) 

什麼也沒有發生那些,

Control.ModifierKeys == Keys.None 

意味着沒有任何按鍵被按下,除了按下Alt/Control之外的任何按鍵。

+0

你說得對。謝謝。我正在使用listbox並更改爲ListView我忘了更改if條件(因爲您知道它是-1的ListBox)更改後,我必須單擊2次才能獲取對話框問題?爲什麼? – 2015-04-04 00:13:06

+0

您的MultipleToText處理程序訂閱了什麼事件? – kskyriacou 2015-04-04 00:26:08

+0

@ kyriacoss MouseClick事件 – 2015-04-04 11:41:56

相關問題