Mik*_*ter 3 listbox selectedindexchanged onmousedown winforms
我正在编写一些代码来检测打开MultiSelect的WindForms ListBox中的选择切换.由于SelectedIndexChanged只让我看到点击后选择的内容,我一直在寻找一种方法来检测单击ListBox之前选择的内容.我实现了MouseDown事件,我可以得到我想要的,但不幸的副作用是我杀死了SelectedIndexChanged事件.它不会开火.
这是已知行为吗?有关在点击之前进入选择列表的想法吗?
谢谢.
编辑以包括所请求的代码片段.
Designer生成的事件:
this.lbPhysicianClinic.SelectedIndexChanged += new System.EventHandler( this.lbPhysicianClinic_SelectedIndexChanged );
this.lbPhysicianClinic.MouseDown += new System.Windows.Forms.MouseEventHandler( this.lbPhysicianClinic_MouseDown );
Run Code Online (Sandbox Code Playgroud)
显示MouseDown事件的代码段:
private void lbPhysicianClinic_MouseDown( object sender, MouseEventArgs e )
{
List<Clinic_List_ByPhysicianResult> Selected = this.PhysicianGetSelectedClinics( this.lbPhysicianClinic.SelectedIndices );
}
Run Code Online (Sandbox Code Playgroud)
显示SelectedIndexChanged事件的代码段:
private void lbPhysicianClinic_SelectedIndexChanged( object sender, EventArgs e )
{
try
{
if ( this.FormInitComplete && this.RefreshUIComplete )
{
List<Clinic_List_ByPhysicianResult> Selected = this.PhysicianGetSelectedClinics( this.lbPhysicianClinic.SelectedIndices );
Clinic_List_ByPhysicianResult DroppedClinic = new Clinic_List_ByPhysicianResult();
Run Code Online (Sandbox Code Playgroud)
我在每个事件中设置了一个断点,如果有MouseDown事件,那么SelectedIndexChanged事件永远不会触发.它仅在MouseDown事件消失时触发.
希望这能澄清事情.
ListBox在引发MouseDown或SelectedIndexChanged事件之前更改其选择.
您需要做的是捕获基础Win32消息并自己引发事件.您可以继承ListBox来执行此操作.
class MyListBox : ListBox
{
private const int WM_LBUTTONDOWN = 0x201;
public event EventHandler PreSelect;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_LBUTTONDOWN:
OnPreSelect();
break;
}
base.WndProc(ref m);
}
protected void OnPreSelect()
{
if(null!=PreSelect)
PreSelect(this, new EventArgs());
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用MyListBox类,并为PreSelect事件添加处理程序,如下所示:
this.lbPhysicianClinic.PreSelect +=
new EventHandler(this.lbPhysicianClinic_PreSelect);
Run Code Online (Sandbox Code Playgroud)
在事件处理程序内部,您可以在列表框更改之前访问所选索引.
| 归档时间: |
|
| 查看次数: |
1789 次 |
| 最近记录: |