Frage

Ich schreibe einen Kodex, um den Umschalten der Auswahl in einem Windforms-ListBox mit Multiselect eingeschaltet. Da ausgewähltIndexchanged nur sehen kann, dass ich sehen, was nach dem Klick ausgewählt ist, suchte ich nach einem Weg, um zu erkennen, was ausgewählt wurde, bevor der Listbox angeklickt wurde. Ich habe das Mousedown-Ereignis umgesetzt und ich kann genau das bekommen, was ich will, aber eine unglückliche Nebeneffekt ist, dass ich das ausgewählteIndexchange-Ereignis getötet habe. Es wird nicht feuern.

ist dieses bekannte Verhalten? Gibt es irgendwelche Gedanken, um die Auswahlliste vor dem Klick zu erreichen?

danke.

bearbeitet, um Code-Snippets wie angefordert einzubeziehen.

Designer generierte Ereignisse: generasacodicetagpre.

Code-Snippet zeigt das Ereignis von Mousedown: generasacodicetagpre.

Code-Snippet mit ausgewähltemIndexchanged-Ereignis zeigt: generasacodicetagpre.

Ich habe in jedem Ereignis einen Haltepunkt eingestellt, und wenn das Mousedown-Ereignis vorhanden ist, feuert das ausgewählteIndexchange Event niemals. Es feuert nur, wenn das Mousedown-Ereignis weg ist.

Hoffentlich klärt das klarer Dinge.

War es hilfreich?

Lösung

The ListBox changes its selection before it raises the MouseDown or SelectedIndexChanged events.

What you need to do is capture the underlying Win32 message and raise an event yourself. You can subclass ListBox to do this.

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());
    }

}

You can use the MyListBox class, and add a handler for the PreSelect event like so:

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

Inside the event handler you can access the selected indices before the listbox has changed them.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top