Eigenschaften von Steuerelemente in Form2 ändern



  • Sorry, wenn meine Fragen nerven (Newbie halt 🙄 ), aber wo muss ich das in den Code schreiben.
    Kannst Du mir evtl. mal den Code von beiden Header-Dateien schreiben?
    Wäre echt super nett! 🙂

    Vielleich trotzdem nochmal die Frage:

    An welcher Stelle in meinem Code muss ich eine Variable deklarieren, damit ich sie auch in Form2 verwenden kann.

    Das brauche ich nämlich trotzdem für was anderes... 😃



  • Such Dir mal die Stelle in Deinem Buch, die sich mit Klassen und Objekten beschäftigt und lies dann ein wenig über public und private .

    Ansonsten fällt mir nur ein: Die Deklaration der Variable sollte im Header innerhalb der Klasse stehen und die Definition (und somit deklaration) des Properties ebenfalls innerhalb der Klasse im Header (ich weiß nicht wie ich beim property definition und deklaration trennen kann).

    Eventuell verstehe ich auch Deine Frage nicht.



  • In deinem "Form2.h" machst Du folgendes ganz ans Ende der Klasse rein:

    public:
      property bool MyBoolProperty
      {
        bool get() { return this->label1->Enabled; }
        void set(bool val) { this->label1->Enabled = val; }
      }
    

    Dann kannst Du direkt vom Form1 auf dieses Property einer Form2-Instanzu zugreifen.



  • Hi noch mal!

    Eine Frage hab ich aber immer noch:
    Wie kann ich eine globale Variable deklarieren? Also eine Variable, die ich in jeder Form verwenden kann.

    Ich stell mir das irgendwie so vor:

    //Form1.h
    
    public: 
    	int Name_der_Variable;
    
    //Form2.h
    
    Name_des_Projekts::Name_der_Form::Name_der_Variablen = 7;
    

    Dann kommt aber der Fehler: „error C2597: Ungültiger Verweis auf nicht-statischen Member“.

    Habt ihr da 'ne Idee???



  • ref class Globals sealed abstract
    {
    public:
      static String ^MyGlobalVariable;
    };
    

    Und zugreifen z.B. via:

    Console::WriteLine(Globals::MyGlobalVariable);
    

    PS: Aber wenn man globale Variablen hat, dann ist i.d.R. irgendwas am Design schief...



  • ja,

    die globale Variable als solche ansprechen und nicht der Form zuweisen. Am besten keine globalen Variablen verwenden (und sich mit dem Thema sichtbarkeitsbereiche auseinander setzen).

    Zudem: Bitte nicht das extern vergessen wenns schon global sein muss und vorweg: Mit managed Klassen geht keine globale Variable, hier musst Du ein wenig den Gedankenweg eines Singelton folen. (statische Variable in eine Klasse legen, die Du als solche verwenden kannst).



  • Jochen Kalmbach schrieb:

    ref class Globals sealed abstract
    {
    public:
      static String ^MyGlobalVariable;
    };
    

    ...hab ich in mein Programm in Form1 eingebunden. Kann in Form1 auch die Variable auslesen und editieren.

    Aber wenn ich in Form2 schreibe:

    Console::WriteLine(Globals::MyGlobalVariable);
    

    ...dann kommt:
    "error C2653: 'Globals': Keine Klasse oder Namespace" 😞



  • Vllt dafür sorgen, das die Klasse Globals auch überall bekannt ist ?

    Wo hast Du denn Globals deklariert ?



  • Knuddlbaer schrieb:

    Vllt dafür sorgen, das die Klasse Globals auch überall bekannt ist ?

    Wo hast Du denn Globals deklariert ?

    In Form1.h:

    #pragma region Windows Form Designer generated code
    		void InitializeComponent(void)
    		{ ...}
    
    ref class Globals sealed abstract 
         { 
             public: 
                static String ^MyGlobalVariable; 
         };
    
    #pragma endregion
         ...
    

    Falsch?



  • ja, so ist es auch nur in Form1 sichtbar bzw. Du müsstest Form1.h in Form2.h includieren.

    Evnetuell wäre es sinvoller, die Klasse in einen eigenen Header zu packen und diesen in Form1.h UND Form2.h zu includieren (oder in die stdafx.h, womit die Deklaration auch überall sichtbar wäre, die stdafx.h wird ja automatisch beim Anlegen von Klassen includiert).

    Hinzu kommt noch, das die Klasse als <unbekannt, vermutlich private> in Form1 liegt. Du müsstest also mit

    Form1::Globals darauf zugriefen, sofern diese dann public wird. Nimm die Deklaration aus der Form raus.

    Wenn Du dann noch ein

    ref struct Globals ... daraus machst, kannst Du Dir das public innerhalb der Klasse sogar sparen.


Anmelden zum Antworten