MenuStrip - ändernde Oberfläche



  • Hi all,

    wenn man bei Windows Forms die Registerkarten nutzt, dann hat man ja so etwas wie einen Container, der je nach Registerkarte unterschiedliche Buttons, Labels etc. enthält.

    Kann ich jetzt irgendeinen Container anlgegen, der sich beim klicken auf ein Element eines MenuStrips ändert?

    Hier mal ein Beispiel, weil ich befürchte, dass man das da oben nicht so richtig versteht:

    In meinem Menu gehe ich jetzt z.B. auf den Reiter Datei/Speichern. Dann sollen ein Speichern-Button und ein Datei-Manager zu sehen sein. Gehe ich aber auf den Reiter Bearbeiten/Suchen, dann sollen die vorherigen Elemente verschwinden, und stattdessen dort ein Textfeld und ein Suchen-Button sein.

    Die einfachste Möglichkeit wäre jetzt, wenn sich eine weitere Form öffnen würde. Nur genau das will ich nicht. Diese Form soll sozusagen in meiner Form1 erscheinen.



  • Mir fallen da Tabcontrols ein, die Du einfach per Menü umschaltest.

    Alternativ kannst Du Panels einsetzen, die Du auf visible setzt. (Fände ich aber sehr Umständlich zu Designen)



  • Ja OK, ich werd mich mal in der MSDN mit der TabControl-Klasse vertraut machen und wenn ich noch Fragen hab, melde ich mich nochmal.

    P.S. Vielen Dank schonmal.

    P.P.S. Muss mich unbedingt bald mal anmelden 😉



  • C++ Programmer schrieb:

    P.P.S. Muss mich unbedingt bald mal anmelden 😉

    Gesagt, getan 😉

    Hab grad gesehen, dass TabControls das sind, was ich im 1. Post als Registerkarten bezeichnet hab (habs nicht so mit Fachbergriffen^^) Die per Menu umschalten wäre sicher möglich, nur dann wäre wieder das Problem, dass man sieht, dass das TabControls sind und dann könnte man das auch direkt machen.

    Aber die Idee mit den Panels find ich garnicht mal so übel. Wäre beim Designen wirklich ein wenig schwer. Aber sonst relativ simpel. Würde dann sagen, dass das ganze in 2 Schritten gemacht wird. Zuerst werden wieder alle Panels als Invisible gesetzt und dann das gewollte als visible.



  • Gegen Panels spricht halt nur die schwierigkeit beim Designen 😉



  • Werd nachher mal schauen, ob man die schon während dem Designen invisible setzen kann, glaub ich aber nicht. Also so, dass ich eins nch dem anderen Designe und dann invisible setze.

    Aber sonst mach ich das so.



  • So, hab´s jetzt ausprobiert. Ist eigentlich relativ simpel. Im Menu-Strip beim EventHandler Click habe ich einfach nur "this->panel1->visible = true;" eingetragen. Davor kam noch die Funktion fürs zurücksetzen.

    Die Funktion sieht so aus:

    void panelinvisible () {
    this->panel1->visible = false;
    this->panel2->visible = false;
    }
    

    Das ist relativ umständlich. Kann man die Panels nicht irgendwie zusammenfassen oder so?

    Sofern ich das doch so machen muss wie oben, möchte ich gerne eine eigene Header-Datei dafür anlegen. Aber jetzt weiß ich nicht, wie ich die includieren soll. Weil die panelinvisible.h nicht auf die Klassen in der form1.h zugreifen kann.

    Hab nen kleines Problem, hab in ner Header-Datei "panelrenew.h" ne Klasse angelegt. Die setzt dann alle Panels auf Invisible zurück. Damit das geht, includiert die die "Form1.h". Dann müsste ich die "panelrenew.h" ja auch in der "Form1.h" includieren, oder? Aber das geht ja nicht. Wie soll ichn das machen?

    Die "Form1.h":

    private: System::Void untermenuEinsToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {	
    			 	panelrenew::panelrenew ();
    				this->panel1->Visible = true;
    		 	}
    	private: System::Void untermenuZweiToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    			 	panelrenew::panelrenew ();
    				this->panel2->Visible = true;
    		 	}
    

    Zeile 2 = 331;
    Zeile 6 = 335;

    Die "panelrenew.h":

    #pragma once
    #include "Form1.h"
    
    public ref class panelrenew 
    {
    public:
    	void panelrenew ()
    	{
    		this->panel1->Visible = false;
    		this->panel2->Visible = false;
    	}
    }
    

    Und hier die Fehlermeldungen:

    ********\Form1.h(331) : error C2653: 'panelrenew': Keine Klasse oder Namespace
    ********\Form1.h(331) : error C3861: "panelrenew": Bezeichner wurde nicht gefunden.
    ********\Form1.h(335) : error C2064: Ausdruck ergibt keine Funktion, die 0 Argumente übernimmt



  • Stichwort property!
    Schau mal in die FAQ!


Anmelden zum Antworten