TabControl - Abfangen, auf welchem Karteireiter sich die Maus befindet



  • Ohne dass ich nachgeschaut habe, das Event liefert im Parameter Eventargs bestimmt den Tab mit, einfach mal durchdebuggen.



  • Bei den MouseEventArgs habe ich nichts entsprechendes gefunden.
    Bei dem sender-Parameter gibt es zwei Stellen, an denen ich erkennen kann, auf welchen Karteireiter geklickt wurde. Diese sind aber leider nur beim Debuggen zugänglich:

    ((System.Windows.Forms.TabControl)(sender)).lastSelection
    System.Windows.Forms.TabControl.TABCONTROLSTATE_hotTrack
    

    Vielleicht noch eine Idee 😕



  • Na das reicht doch! Frage den Sender entsprechend ab und fertig.



  • Das bekomme ich leider nicht hin.
    Diese Werte kann ich zwar beim Debuggen sehen, bekomme sie aber nicht über meinen Code abgefangen. 😞



  • Ellek schrieb:

    Das bekomme ich leider nicht hin.
    Diese Werte kann ich zwar beim Debuggen sehen, bekomme sie aber nicht über meinen Code abgefangen. 😞

    alles was Du im Debugger siehst kannste auch während der Laufzeit auswerten, musst eben entsprechend casten, etc.



  • Dem scheint nicht so zu sein.
    Es scheinen interne Debuginformationen zu sein, an die ich nicht ran komme.
    Beim Kompilieren bekomme ich sofort eine Fehlermeldung.

    Beispiel:

    "System.Windows.Forms.TabControl" enthält keine Definition für "lastSelection".



  • SeboStone schrieb:

    alles was Du im Debugger siehst kannste auch während der Laufzeit auswerten, musst eben entsprechend casten, etc.

    Stimmit so leider nicht. Im Debugger kannst du problemlos aud private / protected Member einer Klasse zugreifen. Im Code funktioniert das (natürlich) nicht.



  • Mit diesem Event funktioniert es hier. Da die Reiter zum TabControl gehören und nicht zu den TabPages, musst Du sicherstellen das e.X und e.Y der Mouse innerhalb des Recangles des Reiters sich befindet.

    private void tabControl1_MouseClick(object sender, MouseEventArgs e)
    {
       Rectangle tabRect;
       if (e.Button == MouseButtons.Middle)
       {
           for (int i = 0; i < tabControl1.TabPages.Count; i++)
           {
               tabRect = tabControl1.GetTabRect(i);
               if (e.X > tabRect.Left && e.X < tabRect.Right && e.Y > tabRect.Top && e.Y < tabRect.Bottom)
               {
                   tabControl1.TabPages.RemoveAt(i);
               }
            }
        }
    }
    


  • Danke!
    Auf die Lösung wäre ich ja nie gekommen, dass man die Maus-Koordinaten abfangen muss.
    Die Lösung funktioniert einwandfrei. 🙂



  • Herb schrieb:

    Stimmit so leider nicht. Im Debugger kannst du problemlos aud private / protected Member einer Klasse zugreifen. Im Code funktioniert das (natürlich) nicht.

    Ja das ist richtig, habe aber angenommen, dass es ein public property ist. Aber jetzt hat er ja seine Lösung.


Anmelden zum Antworten