C# ListBox循 按键的问题

做了个listbox,显示了N条记录,没有写按键事件(keypress).然后实测,上下箭头和左右箭头是默认能控制list选中item的上下变动的
就是按方向键↓或者→,选中的item就向下一个。按方向键↑或者←,反之。但是item到第一条(index是0),再按↑就无效了,反之也是,到最下1条,再按↓无效
顾想实现一个循环,就是当前是最后1条,再按↓就到第一条。
然后写了Keydown事件,
if (e.KeyCode == Keys.Down||e.KeyCode==Keys.Right)&&((ListBoxScreened.SelectedIndex == ListBoxScreened.Items.Count - 1)
     ListBoxScreened.SelectedIndex = 0;
检验的时候,发现会多跳1个,会进入 ListBoxScreened_SelectedIndexChanged 2次,第一次0,第二次1.我定义了int来看selectIndex,

这个1不知道怎么出来的,是不是Keydown有默认的响应函数?
怀疑是Keyup造成的,又写了keyup,也是上面的语句,不会到第二条了,但是按键起来,就自动跳,最后一条选不中了!

你自己想出问题的原因了,解决容易 
加一句:e.Handled = True

再给有changed事件赋值前,可以先去掉changed事件然后再加上
 this.cmb1.SelectedIndexChanged -= new System.EventHandler(this.cmb1_SelectedIndexChanged);
 赋值中。。。
 this.cmb1.SelectedIndexChanged += new System.EventHandler(this.cmb1_SelectedIndexChanged);

当你按向下键时,就会触发一次 ListBoxScreened_SelectedIndexChanged,然后 在 ListBoxScreened.SelectedIndex = 0时,又会触发一次 ListBoxScreened_SelectedIndexChanged,解决办法最简单直接的办法就是给个变量,在 ListBoxScreened.SelectedIndex = 0;后面赋值isSelected=false,然后 ListBoxScreened_SelectedIndexChanged判断一下,为false就不执行事件里的业务。


if (e.KeyCode == Keys.Down||e.KeyCode==Keys.Right)&&((
if (ListBoxScreened.SelectedIndex == ListBoxScreened.Items.Count - 1))
{
    isSelected=false
     ListBoxScreened.SelectedIndex = 0;
}
else
{
   isSelected=true
}

谢谢,用了这一句就OK了,用了F11单步执行,原来,Keydown完成,就是执行了一次index=0后,又进入了indexchanged响应,用了这一句后就没有了。
这个应该是系统默认的响应函数?可以从哪里代码看到么?同时点击键盘上不同的字母,可以定位到list的各个不同item.这个
小蜜蜂论坛发帖机应该也是默认的响应函数,这个可以从哪里查到?谢谢

发布了74 篇原创文章 · 获赞 0 · 访问量 3081

猜你喜欢

转载自blog.csdn.net/netyou/article/details/104492739