Benutzerdefinierte Steuerelemente und ihre Eigenschaften



  • Hi,

    ich programmiere ein benutzerdefiniertes Steuerelement, das von System::Wondows::Forms::Control abgeleitet ist. Das Control verfügt über ein Paar Eigenschaften, die im Desinger eingestellt werden können. Wie kriegt man zur Laufzeit mit, ab die Eigenschaften einen Wert bekommen. Im Konstruktor die Werte abzurufen - funktioniert nicht (etwa zu früh, die Werte sind noch nicht da).

    Danke im Voraus.



  • Ich baue die Eigenschaft so ein ...

    unsigned char eigenschaft
    
    property unsigned char Eingenschaft
    {
         unsigned char get()  { return eigenschaft; }
         void set(unsigned char val){eigenschat = val;} ///  Hier bekommst du mit wenn der Wert gesetzt wird
    }
    

    MfG And One



  • Ja ..., ich baue die Eigenschaften genau so wie Du ein. Und daran habe ich eigentlich auch schon gedacht. Die Lösung gefällt mir nicht. Es sollte doch die Möglichkeit geben, mitzubekommen, wann das Controll so zu sagen vollkommen geladen worden ist (wie UserControl::OnLoad). Oder vielleicht kann man die Eigenschaften irgendwie überwachen. 😕

    Aber Danke 🙂



  • Dann benutz doch den "Load" Eventhandler. Wenn der aufgerufen wird sind die Eigenschaften ja schon gesetzt. Hab ich schon getestet.

    MfG AndOne



  • Wirf halt selber ein Event, wenn das letzte Property gesetzt wurde.

    delegate void myDelegate(System::Object ^sender, System::EventArgs ^args);
    
    class Form1
    {
        event myDelegate myEvent;
    
        property unsigned char Eingenschaft
        {
            unsigned char get()  { return eigenschaft; }
            void set(unsigned char val); 
            ///  Hier bekommst du mit wenn der Wert gesetzt wird
        }
    };
    
    void Form1::Eigenschaft::set(unsigned char val)
    {
        eigenschat = val;
        myEvent(this, gcnew EventArgs());
    }
    

    An myEvent kannst Du einen EventHandler hängen, der dann aufgerufen wird, wenn alle Felder gesetzt sind.



  • AndOne schrieb:

    Dann benutz doch den "Load" Eventhandler. Wenn der aufgerufen wird sind die Eigenschaften ja schon gesetzt. Hab ich schon getestet.

    MfG AndOne

    Kann ich nicht, Load in System::Windows::Forms::Control ist nicht verfügbar.



  • taraneas schrieb:

    Wirf halt selber ein Event, wenn das letzte Property gesetzt wurde.

    delegate void myDelegate(System::Object ^sender, System::EventArgs ^args);
    
    class Form1
    {
        event myDelegate myEvent;
    
        property unsigned char Eingenschaft
        {
            unsigned char get()  { return eigenschaft; }
            void set(unsigned char val); 
            ///  Hier bekommst du mit wenn der Wert gesetzt wird
        }
    };
    
    void Form1::Eigenschaft::set(unsigned char val)
    {
        eigenschat = val;
        myEvent(this, gcnew EventArgs());
    }
    

    An myEvent kannst Du einen EventHandler hängen, der dann aufgerufen wird, wenn alle Felder gesetzt sind.

    Das ist im Prinzip das gleiche, was AndOne schon vorgeschlagen hat.



  • Das ist im Prinzip das gleiche, was AndOne schon vorgeschlagen hat.

    Im Prinzip schon, allerdings hat man es mit dem Load-Event nicht selber in der Hand , wann das Event geworfen wird. Bei meinem Vorschlag kann man das selbst steuern. Wird dann interessant, wenn man viele Eigneschaften hat, bei denen bestimmte wichtig sind und andere vielleicht weniger.



  • taraneas schrieb:

    Das ist im Prinzip das gleiche, was AndOne schon vorgeschlagen hat.

    Im Prinzip schon, allerdings hat man es mit dem Load-Event nicht selber in der Hand , wann das Event geworfen wird. Bei meinem Vorschlag kann man das selbst steuern. Wird dann interessant, wenn man viele Eigneschaften hat, bei denen bestimmte wichtig sind und andere vielleicht weniger.

    Ich meinte das von AndOne:

    [cpp]unsigned char eigenschaft
    property unsigned char Eingenschaft
    {
    unsigned char get() { return eigenschaft; }
    void set(unsigned char val){eigenschat = val;} /// Hier bekommst du mit wenn der Wert gesetzt wird
    }[/cpp]



  • martin_pavel schrieb:

    Kann ich nicht, Load in System::Windows::Forms::Control ist nicht verfügbar.

    Warum nimmst Du eigentlich nicht UserControl?


Anmelden zum Antworten