TabControl erzeugen



  • Hallo devil81,

    gute Erklärung und prima Klasse. Thx 👍

    Mit m_dynTabCtrl.InsertItem( new dialogklasse1,"Frohe Weihnacht", IDD_DIALOG1);
    kann ich nun endlich wo ich will mein TabCtrl platzieren.
    Das sollte wirklich in die FAQ, weil schon so viele danach gesucht haben.

    Mit deiner Erlärung geht es nun bestens 👍 👍



  • Finde ich auch eine sehr gute Beschreibung. Hab's auch sofort hinbekommen.

    Ich frage mich nur, wie ich aus dem Hauptdialog" auf die einzelnen Elemente der Karteireiter zugreifen kann... Also beispielsweise den text eines Edit Feldes ändern und so.

    Kann mir das bitte wer erklären?

    Wenn ich es so versuche, stürzt mein Programm ab...

    m_ctlProperty.GetTab(0)->SetDlgItemtext(IDC_TEXT, "Hallo");
    

    Danke im Voraus. 🙂



  • Hm, eigentlich gehört das dann in die Dialogklasse von dem
    jeweiligen Tab... 🙄
    Ansonsten liefert GetTab nur einen Zeiger auf CDialog zurück,
    du Müsstest also evtl. noch auf deine spezielle Klasse casten.

    Devil



  • devil81 schrieb:

    Ansonsten liefert GetTab nur einen Zeiger auf CDialog zurück,
    du Müsstest also evtl. noch auf deine spezielle Klasse casten.

    Ich hab ehrlich gesagt keine Ahnung, was du damit meinst. 😕

    Das Problem ist folgendes:

    Ich habe mehrere Kerteireiter auf denen verschiedene Einstellungmöglichkeiten zu machen sind (zu jeder Kategorie ein Tab). Nun nöchte ich alle Einstellungen mit einem Button auf dem Hauptdialog speichern.

    Ich probiere schon die ganze Zeit es hinzubekommen, leider ohne Erfolg...

    P.S.: Ich hatte eine Email an dich geschrieben. Hab nicht gecheckt, dass du die Klasse geschrieben hast. 🤡 Da hab ich auch ein paar Zeilen korrigiert.



  • Ellek schrieb:

    devil81 schrieb:

    Ansonsten liefert GetTab nur einen Zeiger auf CDialog zurück,
    du Müsstest also evtl. noch auf deine spezielle Klasse casten.

    Ich hab ehrlich gesagt keine Ahnung, was du damit meinst. 😕

    Das Problem ist folgendes:

    Ich habe mehrere Kerteireiter auf denen verschiedene Einstellungmöglichkeiten zu machen sind (zu jeder Kategorie ein Tab). Nun nöchte ich alle Einstellungen mit einem Button auf dem Hauptdialog speichern.

    Die Informationen etc. über die Steuerelemente liegen ja in den Instanzen deiner Klassen.
    DynTabCtrl speichert aber nur CDialog* Pointer, da die Klasse ja alle Dialoge darstellen
    soll, und nicht nur die eines typs, d.h. du musst dann den Pointer noch
    in die richtige Klasse casten. Dafür musst du wissen, welche Klasse auf welchem
    Tab liegt.

    ((CMyDlg*)m_tabctrl.GetTab(0))->*zugriff auf membervars oder funktionen*

    Devil



  • Hallo,

    Ich habe auch mal deine Klasse zum testen verwendet, allerdings musste ich das hier ändern, damit ich Zugriff auf die einzelnen Tab-Dialoge hatte:

    Aus

    CDialog* DynTabCtrl::GetTab(int itab)
    {
    	if(m_tabs.size() < itab && itab > -1)
    		return m_tabs[itab];
    	return NULL;
    }
    

    muss

    CDialog* DynTabCtrl::GetTab(int itab)
    {
    	if(m_tabs.size() > itab && itab > -1)
    		return m_tabs[itab];
    	return NULL;
    }
    

    werden, sonst bekommt man immer NULL anstatt des Pointers auf einen Dialog zurückgeliefert (die Nummer des Tab-Dialogs kann nicht größer als die größe des Vektors sein 😉 )

    nur so als Anmerkung...



  • Danke für den Fehlerhinweis, war mir garnicht aufgefallen...

    Ich hab die Klasse nochmals überarbeitet, es ist jetzt möglich
    die einzelnen Tabs zu löschen, entweder ein beliebiges Tab,
    oder nur das was gerade den Focus hat. Standardmässig ist
    das jedoch abgeschaltet, mann muss es entweder im Konstruktor
    aktivieren, oder DynTabCtrl::SetDeleteTab(true) aufrufen.

    Devil



  • Also eine gaaanz dumme frage:

    wie kann ich machen, dass, wenn ich einen button drücke, ein tab entfernt wird?!
    bitte genauste anleitung, da noob am werk 😉



  • Du must nur die Nummer des Tabs welches du löschen willst wissen,
    und dann einfach DeleteItem(nummer) aufrufen.

    In der Neusten Version ist es aber auch so implementiert
    das man sie über Rechtsklick schliessen kann. Schaus dir einfach an.

    Devil



  • Und was mache ich, wenn ich bereits einen kompletten Dialog fertig habe und diesen nun in eine Registerkarte einfügen möchte? Sprich: Wie bekomme ich all´ die Ressourcen in das neue Projekt, so dass auch alle Funktionen noch einwandfrei laufen?

    Gruß,
    Holger



  • Den Dialog müsstest du importieren können, oder Copy & Paste müsste auch funktionieren,
    wenn du beide Projekte offen hast.
    Dann musst du noch die entsprechenden Dateien für die Dialogklasse dem Projekt hinzufügen.

    Der Dialog muss dann noch in den Resourcen so eingestellt sein, das er keinen Rand
    hat, und untergeordnet ist.

    Devil



  • Hallo devil81!
    Ich habe eine frage zu deinem Anleitung!
    Zu punkt 3: In welcher Klasse muss ich die Membervariable erstellen?



  • Im Dialog wo das TabCtrl liegt.



  • Hallo zusammen,

    finde die Klasse auch ganz praktisch!

    Nur leider stehe ich an:

    Ich möchte die Tabs vom Programm her ansteuern. Das heisst soviel wie, ich befinde mich gerade in einem Tab und möchte beim anklicken eines bestimmten Buttons direkt in ein anderes Tab wechseln...

    hab bisher leider nichts rausbekommen, bin für gute Ratschläge offen.

    Gruss



  • Da ist mir gerade noch was aufgefallen:

    Wenn man mit den Pfeiltasten die Tabs auswählt, wechselt der Dialog nicht...



  • aCCa schrieb:

    Da ist mir gerade noch was aufgefallen:

    Wenn man mit den Pfeiltasten die Tabs auswählt, wechselt der Dialog nicht...

    Würde mich auch interessieren wie man den Dialog-Wechsel durch die Pfeiltasten realisiert



  • normal sollte sowas mit [strg]+[tab] gehen.. zumindest bei den normalen CTabCtrl... aber sowas sollte man wissen.... depp 😉



  • (D)Evil schrieb:

    normal sollte sowas mit [strg]+[tab] gehen.. zumindest bei den normalen CTabCtrl... aber sowas sollte man wissen.... depp 😉

    das checkt johnny nicht so ganz. was meinst du mit [strg]+[tab]? es geht darum die funktionalität hinzuzufügen, dass mit den pfeiltasten zwischen den tabs gwechselt werden kann in (innerhalb des CTabCtrl)!



  • aCCa schrieb:

    Da ist mir gerade noch was aufgefallen:

    Wenn man mit den Pfeiltasten die Tabs auswählt, wechselt der Dialog nicht...

    Weiß jemand wie das geht?



  • Hi
    Ich habe DynTabCtrl in eine SDI -anwendung mit Formview ansicht
    gepackt . Wenn ich diese anwendung schliesse kommen immer die Meldungen:

    Freigeben des Tabsheets fehlgeschlagen

    für jedes Tab.

    Wie kann ich diese Tabs freigeben bevor das Fenster geschlossen wird ?

    Danke für die Hilfe


Anmelden zum Antworten