verständnisfragen



  • wir wurden von unserem prof mal wieder ins kalte wasser geschmissen und nachdem ich mir schon einiges selbst angeeignet habe wollte ich zu folgenden punkten mal euch um rat fragen:

    1. was genau stellt dieses gebilde dar:
    ziffern=gcnew array<array<Ziffer^>^>(3);
    

    also nur der bereich hinter gcnew natürlich

    2)dieser befehl innerhalb der form bewirkt was genau?

    this->Controls->Add(this->spielkonsole);
    

    nur das es in der steuerelementeauflistung zur verfügung steht?
    was genau bedeutet das?

    3)dann mal eine frage zu dem eventhandler. er behandelt die fälle in denen ein ereignis ausgeführt wird oder? als bei einem button ruft er die entsprechende methode auf oder?

    this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
    

    hier würde er als beim drücken, die fkt button1_Click aufrufen oder?

    4)wenn also dann die entsprechenden fkt aufgerufen werden, was kann ich mir dann unter den argumenten dieser fkt vorstellen:

    System::Object^  sender, System::EventArgs^  e
    

    sender?e? was für typen sind das? wüsste gar nicht mit welchen parametern ich diese fkt füttern sollte.

    vielen dank für eure geduld aber wenn ich hier nicht nachfrage, komm ich nie zum ende



    1. Ein Array von Arrays vom Typ Ziffer, ein 2 dimensionales jagged Array also.

    2. Das Steuerelement Spielekonsole für der Control Collection hinzugefügt, das besonder an der ControlCollection ist halt das Sontrols die dort eingefügt werden, auch auf der Form angezeigt werden. Ohne dieses Hinzufügen könntest du also schön deine Controls erstellen etc. aber es passiert nichts visuelles bis die zu dieser Collection hinzugefügt werden.

    3. Du meinst wahrscheinlich das richtige, aber dein Erklärung ist nicht korrekt.

    als bei einem button ruft er die entsprechende methode auf oder?

    Nicht der Eventhandler ruft irgendwas auf, sondern er wird aufgerufen sobald das Event eintritt. Du sagst mit deinem Code praktisch dass, sobald das Click Event auftritt, dein Handler button1_Click aufgerufen werden soll. Dieser Aufruf geschieht durch den Button in dem Fall, und der übergibt auch die entsprechenden Parameter, du musst da gar nichts angeben um zu Frage 4 zu kommen.

    1. sender ist nen Object und das Control welches das Event ausgelöst hat, in deinem Fall wäre es also button1. Weils nen Object ist müsste man halt noch zu Button casten wenn man da speziellere Infos brauch, aber oft brauch man den sender gar net, nur ab und zu wenn man einen Handler für mehrere Sender hat, dass man da unterscheiden kann. e sind jetzt Eventargumente, also zusätzliche Infos. Beim Click sind nur die Standard EventArgs bei die keine zusätzlichen Infos liefern, aber bei Mausbewegungen z.B. gibt Eventargs wo noch die Koordinaten der Maus bei sind z.B.


  • ok danke soweit, dann würde ich gerne noch wissen was es bedeutet, wenn eine fkt als returnparameter IComparable^ besitzt. was kann ich damit anfangen?



  • IComparable ist ein Interface... sie sind dazu gedacht, dass du nicht jeden Typ kennen musst mit dem du arbeiten willst (d.h. es könnten 10000 Objecte existieren die IComparable implementiert haben aber du kannst jedes Objekt über diese Interface ansprechen). Wie IComparable schon sagt, werden dir dort ein paar Methoden angeboten womit du irgendwas mit was anderem vergleichen kannst.



  • und wie hängt das ganze mit WinUnit zusammen?



  • Gar nicht. Musste erstmal nachschaun was das sein soll. Meinst du das hier? Falls ja schließt sich das sogar in gewisser Weise aus, da WinUnit für native C++ verwendet wird und nicht für .Net welches ja bei Windows Forms verwendet wird.



  • doch genau mit diesem WinUnit arbeiten wir unter CLI/C++!
    aber ok wollte ja auch nur wissen ob IComparable damit direkt zusammenhängt!



  • Wie funktioniert das? Ich meine ein Testframework das für native C++ ausgelegt ist, erwartet ja auch native Datentypen bei Funktionsaufrufen etc. Die kann C++/CLI doch aber gar net liefern. Das selbe Problem existiert natürlich auch anders herum. Das beim VS enthaltene TestFramework z.B. ist auf .Net zugeschnitten und C++/CLI Anwendungen lassen sich prima testen, native C++ Anwendungen dagegen fast gar net.



  • ok es ist dieser code den ich nicht verstehe:

    // Liste_IteratorTest.cpp
    #include "WinUnit.h"
    using namespace System;
    #include "VerketteteListe.h"
    #include "Liste.h"
    
    Liste^ new_Liste();
    
    BEGIN_TEST(Liste_Iterator_Konstruktion)
    { Liste^ liste=new_Liste();
      Liste::Iterator^ i=liste->erzeuge_Iterator();
      WIN_ASSERT_TRUE(i!=nullptr,_T("Iterator-Objekt sollte erzeugt worden sein"));
    }
    END_TEST
    
    BEGIN_TEST(Liste_Iterator_element)
    { Liste^ liste=new_Liste();
      Liste::Iterator^ i=liste->erzeuge_Iterator();
      i->ende();    
      try
      { WIN_ASSERT_THROWS(i->element(),
                        Liste::anfang_Ausnahme^,
                        _T("Iterator steht auf Anfang und darf Element nicht zurueckgeben."));
      }
      catch(Exception^ e) 
      { WIN_ASSERT_FAIL(_T("Ausnahme darf nicht kommen."));
      }
    }
    END_TEST
    

    Dann würde ich gerne noch wisse, wann die Methode OnPaint(PaintEventArgs^ e) eines Panels aufgerufen wird! ich sehe die deklaration, die definition, aber nicht den expliziten aufruf, dennoch wird die methode irgendwo, irgendwie aufgerufen!
    Was sind PaintEventArgs^ ? kann ich damit nur pointer vom typ Graphics^ übergeben?



  • nochmal zu dem onpaint:
    laut msdn:

    Hinweise zur Vererbung:

    Wenn Sie OnPaint in einer abgeleiteten Klasse überschreiben, müssen Sie die OnPaint-Methode der Basisklasse aufrufen, sodass registrierte Delegaten das Ereignis empfangen.

    eben dieser aufruf fehlt oder wird die onpaint methode automatisch aufgerufen wenn ich einen panel erstelle?



  • Dann würde ich gerne noch wisse, wann die Methode OnPaint(PaintEventArgs^ e) eines Panels aufgerufen wird! ich sehe die deklaration, die definition, aber nicht den expliziten aufruf, dennoch wird die methode irgendwo, irgendwie aufgerufen!
    Was sind PaintEventArgs^ ? kann ich damit nur pointer vom typ Graphics^ übergeben?

    edit:
    laut msdn:

    Wenn Sie OnPaint in einer abgeleiteten Klasse überschreiben, müssen Sie die OnPaint-Methode der Basisklasse aufrufen, sodass registrierte Delegaten das Ereignis empfangen.

    eben dieser aufruf fehlt oder wird die onpaint methode automatisch aufgerufen wenn ich einen panel erstelle?



  • OnPaint(..) wird von der Base-Class aufgerufen.
    PaintEventArgs enthält das Graphics-Objekt... das ist zum zeichnen mit GDI+ gedacht



  • also automatisch aufgerufen?
    edit:
    ich drücke es mal anders aus:

    habe in einer klasse folgende funktion:

    void Welt::OnPaint(PaintEventArgs^ e) 
    { 
      Graphics^ g = e->Graphics;
      brumm->zeichne(g);
    
    }
    

    sie ist so deklariert in der klasse:

    public ref class Welt:Panel
    { /** Konstruiert eine Welt */
      public: 
        Welt();
      protected: 
        virtual void OnPaint(PaintEventArgs^ e) override; // Behandlung des Paint-Ereignisses
      private:
         Void behandle_timer_ereignis(Object^ sender,EventArgs^ e); // Behandlung des Zeitgeber-Ereignisses
    
    }
    

    Ich möchte jetzt wissen, wann und wie die onPaint Methode aufgerufen wird, denn ich sehe keinen expliziten aufruf!dennoch wird der code ausgeführt!



  • Hallo,

    Ich möchte jetzt wissen, wann und wie die onPaint Methode aufgerufen wird, denn ich sehe keinen expliziten aufruf!dennoch wird der code ausgeführt!

    Einfach ausgedrückt, immer wenn das (Betriebs-)System meint, dass ein Fenster (oder Teile davon) sich neu zeichnen soll(en) (z.B. wenn es von anderen verdeckt war), wird ein Paint-Ereignis ausgelöst, in dem OnPaint aufgerufen wird.

    MfG,

    Probe-Nutzer


Log in to reply