当我第二次单击时,下面的方法给出了ArgumentOutOfRangeException错误,并且说索引0不是有效索引。
首次点击它有效!?
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);
}
}
答案 0 :(得分:1)
您收到错误,因为您的第一个if语句永远不会评估为true(并返回),因为count永远不会低于0.因此,即使您的列表为空,它仍然会尝试删除第一个元素,抛出一个ArgumentOutOfRangeException。
你的if语句应该检查它是否等于0,如下:
if (li.SelectedItems.Count == 0)
当您按Alt / Control以外的任何内容时没有任何反应,因为您没有处理除此之外的任何按键操作的事件,
Control.ModifierKeys == Keys.None
表示没有按下任何键,而不是按下Alt / Control之外的任何键。