TabControl - Abfangen, auf welchem Karteireiter sich die Maus befindet
-
Danke schon mal für deine Antwort.
Es scheint aber so, als wenn ein Klick auf den eigentlichen Karteireiter nicht von der TabPage, sondern von dem TabControl abgefangen wird.
Hat sonst noch jemand eine Idee, wie ich das realisieren kann?Anbei ein Screenshot, wo die Maus sich befindet, wenn ich die mittlere Maustaste klicke:
-
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.