如果用户单击列表框中的项目,则会调用listboxItems_SelectedIndexChanged。但是,即使用户错过了一个项目并在列表框内随机点击(而不是在项目上),仍然会调用listboxItems_SelectedIndexChanged。
我该怎么改变?我只想对项目点击进行操作。
注意:无法使用键盘删除导航应用程序的功能。
答案 0 :(得分:0)
此链接可能有助于而不是双击,实现相同的单击
答案 1 :(得分:0)
我想在某些情况下,您的控件中没有足够的列表项,因此您可以单击一些空间,然后触发 SelectedIndexChanged 。
我猜你无法动态调整控件的大小以始终适合列表项的数量,否则你不会问这个问题。
现在,当用户点击(选择)同一个列表项时会发生什么?即使选定的索引是相同的,也应该发生一些逻辑(所以当第一次发生相同的逻辑时点击它)?
如果您需要多次选择同一个索引,则可以使用以下hack:
在表单范围(包含列表框控件的表单)中保留一个变量,每次选择索引更改时设置该变量。然后稍后使用它来检查是否已进行相同的选择以忽略处理事件。这是一个例子:
private int _currSelIdx = -1; // Default value for the selected index when no selection
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == _currSelIdx)
return;
Console.WriteLine(listBox1.SelectedIndex);
_currSelIdx = listBox1.SelectedIndex;
}
它不漂亮,但是嘿......无论什么都有效!
答案 2 :(得分:0)
可能SelectedIndexChanged不是放置逻辑的正确位置,因为即使您使用键盘更改选择也会触发它。 我会使用MouseClick,检查点击是否发生在所选项目上,例如:
private void listBox1_MouseClick(object sender, MouseEventArgs e)
{
if (listBox1.SelectedIndex < 0 || !listBox1.GetItemRectangle(listBox1.SelectedIndex).Contains(e.Location))
MessageBox.Show("no click");
else
MessageBox.Show("click on item " + listBox1.SelectedIndex.ToString());
}