gpt4 book ai didi

winforms - WinForm ListBox 中的 MouseDown 会杀死 SelectedIndexChanged

转载 作者:行者123 更新时间:2023-12-01 11:57:04 25 4
gpt4 key购买 nike

我正在编写一些代码来检测 WindForms ListBox 中选择的切换,同时启用了 MultiSelect。由于 SelectedIndexChanged 只允许我查看单击后选择的内容,因此我一直在寻找一种方法来检测单击 ListBox 之前选择的内容。我实现了 MouseDown 事件,我可以得到我想要的东西,但不幸的是我已经杀死了 SelectedIndexChanged 事件。它不会开火。

这是已知行为吗?是否有关于在点击之前进入选择列表的想法?

谢谢。

根据要求进行了编辑以包含代码片段。

设计器生成的事件:

this.lbPhysicianClinic.SelectedIndexChanged += new System.EventHandler( this.lbPhysicianClinic_SelectedIndexChanged );
this.lbPhysicianClinic.MouseDown += new System.Windows.Forms.MouseEventHandler( this.lbPhysicianClinic_MouseDown );

显示 MouseDown 事件的代码片段:

private void lbPhysicianClinic_MouseDown( object sender, MouseEventArgs e )
{
List<Clinic_List_ByPhysicianResult> Selected = this.PhysicianGetSelectedClinics( this.lbPhysicianClinic.SelectedIndices );
}

显示 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();

我在每个事件中都设置了一个断点,如果存在 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());
}

}

您可以使用 MyListBox 类,并为 PreSelect 事件添加处理程序,如下所示:

this.lbPhysicianClinic.PreSelect += 
new EventHandler(this.lbPhysicianClinic_PreSelect);

在事件处理程序中,您可以在列表框更改它们之前访问选定的索引。

关于winforms - WinForm ListBox 中的 MouseDown 会杀死 SelectedIndexChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6050059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com