日期:2014-05-18  浏览次数:20692 次

请问,如何区分不同的选择项发生改变的调用
有个listBox1,它有个选定项发生改变的事件:
listBox1_SelectedIndexChanged(object sender, EventArgs e)

目前,有这么几种情况,使得选定项发生改变
1:鼠标点击项
2:键盘箭头键上下移动,选定项
3:在代码中SetSelected,选定项


我现在需要使第3种和前面2种产生一个区别,使得listBox1_SelectedIndexChanged(object sender, EventArgs e)能区别执行不同的代码


请问,该怎么做?

------解决方案--------------------
简单点可以这样
C# code
this.listBox1.SelectedIndexChanged -= new EventHandler(listBox1_SelectedIndexChanged);
this.listBox1.SetSelected(..., ...);
// 这样 SetSelected 就不触发事件,在这里执行些别的代码
this.listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);

------解决方案--------------------
C# code

// 调用 SetSelected 的代码
this.listBox1.SelectedIndexChanged -= new EventHandler(listBox1_SelectedIndexChanged);
this.listBox1.SetSelected(..., ...);// 在这执行 SetSelected
this.listBox1_SelectedIndexChanged(null, null); // 直接调用事件方法,等同于触发
this.listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);

// 事件方法
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (sender == null)
    {
        // 是 SetSelected 触发的
    }
    else
    {
        // 是别的触发的
    }
}

------解决方案--------------------
listBox1_SelectedIndexChanged(object sender, EventArgs e)
时间里面判断键盘鼠标事件,是否是键盘和鼠标触发的,,第三种是代码触发的很好区分