neuen Tab in einem TabControl zur laufzeit erstellen



  • Hallo!

    Ich arbeite zur Zeit an einer MDI-Anwendung. Mit mehreren Fenstern etc. funktioniert dies auch ganz prima. Ich hätte nun jedoch gerne irgendwo eine Leiste gehabt, in der ich die einzelnen Fenster 'intern' also quasi eine 'programminterne' Taskleiste, ablegen kann.

    Da für soetwas mein bisheriger C# Kenntnisstand noch nicht ausreicht, wollte ich selbiges über das TabControl-Steuerelement machen. Hier hätte ich gerne, dass, wenn ich auf Datei-Neu klicke, sich dem bestehenden TabControl (mit einem Tab [= Unbenannt]) ein weiteres Tab hinzufügt, auf dem 'gleichzeitig' eine RichTextBox platziert wird, um anschließend Texte etc. hineinzuschreiben (irgendwie logisch *gg*).

    Meine Frage daher, ist es überhaupt sinnvoll, das obengenannte 'Problem' über die Tab's zu lösen? Wenn ja, wie muss ich da vorgehen?

    mfg
    azok



  • Servus,

    ob sinnvoll oder nicht keine Ahnung, keine Lust drüber nachzudenken 😃 Aber wie du das realisieren könntest, dass kann ich dir verraten:

    TabPage newTb = new TabPage("Unbenannt"); // Hier neues Tab Objekt erzeugen
    
    RichTextBox newBox = new RichTextBox(); // Hier neues RTB Objekt erzeugen
    newBox.Dock = System.Windows.Forms.DockStyle.Fill; // Hier noch ein paar Attribute setzen, was man für nötig hält und was nicht musst du selber wissen
    .
    .
    .
    
    tabControl_main.TabPages.Add(newTb); // Hier Tab nach TabControl
    tabControl_main.SelectedTab = newTb; // Hier den Tab selektieren
    

    und schon hast du den Salat...

    Viel Spaß
    Hellsgore



  • Hallo zusammen,

    ich verwende eine kleine Abwandlung obigen Schemas und möchte nun zur Laufzeit auf die RichTextBox im aktiven Tab zugreifen.

    mit

    tabcontrol->tabpage->selectedtab
    

    komme ich ja an das aktive Tab, aber wie spreche ich dann die RichTextBox an, bzw. wie komme ich an den Inhalt? (sie ist das einzige Element in dem Tab, vielleicht hilft das)



  • in wpf waer es recht einfach

    da repraesentiert ein objekt ein dokument
    das objekt hat ein property "Title"

    in der xaml dann erstellt man das tab control, und bindet es gegen eine liste von diesen objekten
    und der header wird jeweils gegen Title gebunden und der content dann gegen das jeweilige objekt

    sobald du nun ein neues dokument hast - packst du es einfach in die liste und die ui kuemmert sich selber um den rest

    aber egal - denn zum einen glaub ich das du forms verwendest, und zum zweiten lassen die "->" darauf schliessen das du .Net/CLI verwendest - und dann bist du im falschen forum



  • Mr Evil schrieb:

    aber egal - denn zum einen glaub ich das du forms verwendest, und zum zweiten lassen die "->" darauf schliessen das du .Net/CLI verwendest - und dann bist du im falschen forum

    Oh sorry, du hast natürlich recht. Ich hatte einfach die Suchen-Funktion verwendet und gesehen, hey, das ist ja so ähnlich wie mein Problem und prompt drauf geantwortet, ohne aufs Forum zu achten.

    Wenn noch jemand einen Ansatz hätte, wäre ich dankbar, ansonsten jetzt im richtigen Forum:

    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1783824.html#1783824



  • azok schrieb:

    Ich arbeite zur Zeit an einer MDI-Anwendung. Mit mehreren Fenstern etc. funktioniert dies auch ganz prima. Ich hätte nun jedoch gerne irgendwo eine Leiste gehabt, in der ich die einzelnen Fenster 'intern' also quasi eine 'programminterne' Taskleiste, ablegen kann.

    Reicht dir ein Menu, so wie in Visual Studio unter dem Menüpunkt Fenster?

    Entspricht zwar nicht genau deinen Vostellungen, ist aber umso einfacher umzusetzen:

    In der MDI-From wird ein MenuStrip einfgefügt und bei Form::MainMenu ausgewählt. Dem Strip wird ein Menüpunkt hinzugefügt und dieses unter MenuStrip::MdiWindowListItem ausgewählt. Fertig.

    Sonst ist eine Taskleiste sehr einfach, wenn du nur eine Art von Kinderfenstern hast bzw. diese nur auf eine Art behandelt werden sollen.


Anmelden zum Antworten