第二次单击时 ListViewItem 的 ArgumentOutOfRangeException
ArgumentOutOfRangeException for ListViewItem when clicking 2nd time
下面的方法在我第二次单击时出现 ArgumentOutOfRangeException 错误,并说索引 0 不是有效索引。
第一次点击就可以了!?
ListView FullRowSelect 设置为真。
我看到在按下 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);
}
}
你得到一个错误,因为你的第一个 if 语句永远不会评估为真(和 return),因为计数永远不会低于 0。因此,即使你的列表是空的,它仍然会尝试删除第一个元素,抛出 ArgumentOutOfRangeException。
您的 if 语句应该检查它是否等于 0,例如:
if (li.SelectedItems.Count == 0)
当您按下除 Alt/Control 以外的任何按键时,什么都不会发生,因为您没有处理除这些之外的任何按键事件,
Control.ModifierKeys == Keys.None
意味着没有按键被按下,而不是除了 Alt/Control 被按下之外的任何东西。
下面的方法在我第二次单击时出现 ArgumentOutOfRangeException 错误,并说索引 0 不是有效索引。
第一次点击就可以了!?
ListView FullRowSelect 设置为真。
我看到在按下 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);
}
}
你得到一个错误,因为你的第一个 if 语句永远不会评估为真(和 return),因为计数永远不会低于 0。因此,即使你的列表是空的,它仍然会尝试删除第一个元素,抛出 ArgumentOutOfRangeException。
您的 if 语句应该检查它是否等于 0,例如:
if (li.SelectedItems.Count == 0)
当您按下除 Alt/Control 以外的任何按键时,什么都不会发生,因为您没有处理除这些之外的任何按键事件,
Control.ModifierKeys == Keys.None
意味着没有按键被按下,而不是除了 Alt/Control 被按下之外的任何东西。