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.这个应该也是默认的响应函数,这个可以从哪里查到?谢谢 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值