Laden...

TabPage durch Doppelklick umbennen?

Erstellt von NilsA vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.585 Views
N
NilsA Themenstarter:in
89 Beiträge seit 2006
vor 15 Jahren
TabPage durch Doppelklick umbennen?

Hallo,
ich arbeite gerade an meinem ersten kleinen WinForm Programm. in diesem gibt es momentan ein Tabs, die den Inhalt gliedern sollen.
Die Tabs + Inhalt werden aus einem xml ausgelesen. Es gibt auch ein Menü, worüber Tabs erstellt + gelöscht werden können (funktioniert auch).

Jetzt möchte ich aber tabs umbennenen. Eine möglichkeit die ich auch umsetzen kann, wäre ein neues Fenster zu öffnen -> namen eingeben -> speichern im xml -> tabs neu initialisieren.

Was ich aber gerne hätte wäre folgendes:
Doppelklick auf den TabNamen, dann soll dort "der Cursor blinken" und man soll einfach den neuen Namen eingeben können und z.B. mit Return bestätigen

Ist das so ohne weiteres umsetzbar, oder wird das ganze hierdurch sehr kompliziert? Wenn es zu schwer wird, würde ich das ganze umsetzen wie es mir möglich ist und die "schönere Variante" für die Version 2 einplanen.

Gruß
Nils

Je mehr ich weiß, desto mehr erkenne ich, dass ich nichts weiß.
(Albert Einstein) ...und ich kanns bestätigen 😉

C
401 Beiträge seit 2007
vor 15 Jahren

Du könntest bei einem Doppelklick auf ein Tab eine entsprechend große TextBox direkt über dem Text aufmachen, welche beim bestätigen per Enter wieder verschwindet und den Namen setzt.

Gruß

Dario

N
NilsA Themenstarter:in
89 Beiträge seit 2006
vor 15 Jahren

Danke für die Antwort, corpsegrinder!

Aber woher weiß ich wo ich die textbox positionieren müsste? klar, welches Tab aktiv ist kann ich raus finden, aber ich müsste ja jetzt je nachdem welches Tab editiert werden soll, die textbox über den text schieben.

gruß
Nils

Je mehr ich weiß, desto mehr erkenne ich, dass ich nichts weiß.
(Albert Einstein) ...und ich kanns bestätigen 😉

4.942 Beiträge seit 2008
vor 15 Jahren

Das einzige was mir einfallen würde, um an die Positionen der einzelnen Tabs zu kommen, wäre das TabControl.DrawItem-Ereignis (wenn OwnerDraw = true).
Dort steht dann in "e.Bounds" die Position und Größe drin.

Du müßtest dir dann ein Array aufbauen (evtl. dynamisch, falls sich die Anzahl der Tabs verändert) und diese Werte dann dadrin speichern.
Beim Umbenennen dann die Textbox auf die entsprechende Position und Größe des aktiven Tabs setzen (relativ zum Parent-Control).
Evtl. mit PointToScreen bzw. PointToClient die richtige (relative) Position berechnen oder aber die Textbox zum selben Parent wie dem TabControl hinzufügen.

Wenn die Tabs alle die gleiche Größe haben, dann könntest du die Position auch berechnen (Index * TabWidth). Jedoch klappt das dann schon nicht mehr, sobald die Tabs mit den ScrollBars verschoben werden können...

84 Beiträge seit 2008
vor 15 Jahren

Hallo,

es gibt auch ne Funktion die dir das TabControl anbietet:

.GetTabRect(int index);

Die gibt dir die aktuelle Position und Größe eines Tab-Reiters zurück.
Du musst nur rausfinden auf welchem Tab du einen Doppelklick machst, aber das sollte genauso mit dieser Funktion machbar sein. (.Contains(Point pt))

Ich hatte mal was geschrieben wo eine TabPage mit der mittleren Maustaste geschlossen wird. Ging wunderbar mit dieser Methode! Viel Spaß!

Gruß!
Matscher

360 Beiträge seit 2005
vor 15 Jahren

Moin,

eine (zugegeben etwas ältere) Lösung für dein Problem gibt's hier: TabControl-Reiter

Gruß,
Markus 🙂