OldSchoolHack

Register / Login English

[Tutorial] Eine Form mit Leben füllen

icon Thread: [Tutorial] Eine Form mit Leben füllen

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
In diesem Tutorial verwenden wir unsere Klasse ErsteForm aus dem Tutorial "Eine neue Form erstellen" weiter.
Ziel dieses Tutorials ist es, der Form einen OSHGui::Button hinzufügen, der, wenn man auf ihn klickt, eine OSHGui::MessageBox anzeigt.
Starten wir mit unserer bekannten Klasse:
CPP Code:
  1.  
  2. class ErsteForm : public Form
  3. {
  4. private:
  5. void InitializeComponent()
  6. {
  7. this->SetText("ErsteForm");
  8. }
  9.  
  10. public:
  11. ErsteForm()
  12. {
  13. InitializeComponent();
  14. }
  15. };
  16.  

Um unseren Button zu erstellen, definieren wir ihn erst einmal als MemberVariable unserer OSHGui::Form, damit wir später auf diesen zugreifen können.
CPP Code:
  1.  
  2. class ErsteForm : public Form
  3. {
  4. private:
  5. Button *ersterButton; //Zeiger auf einen Button
  6.  
  7. void InitializeComponent()
  8. {
  9. this->SetText("ErsteForm");
  10. }
  11.  
  12. public:
  13. ErsteForm()
  14. {
  15. InitializeComponent();
  16. }
  17. };
  18.  

Innerhalb von InitializeComponent erzeugen wir nun unseren Button und fügen ihn der Form hinzu:
CPP Code:
  1.  
  2. class ErsteForm : public Form
  3. {
  4. private:
  5. Button *ersterButton;
  6.  
  7. void InitializeComponent()
  8. {
  9. this->SetText("ErsteForm");
  10.  
  11. ersterButton = new Button();
  12. this->AddControl(ersterButton);
  13. }
  14.  
  15. public:
  16. ErsteForm()
  17. {
  18. InitializeComponent();
  19. }
  20. };
  21.  

Wenn wir uns nun die Form anschauen, sehen wir, dass unser Button links oben in der Form angezeigt wird und mit "Button" beschriftet ist.
Nun fügen wir dem Button einen neuen Text hinzu und erstellen eine Funktion, die später unsere MessageBox anzeigt.
CPP Code:
  1.  
  2. class ErsteForm : public Form
  3. {
  4. private:
  5. Button *ersterButton;
  6.  
  7. void InitializeComponent()
  8. {
  9. this->SetText("ErsteForm");
  10.  
  11. ersterButton = new Button();
  12. ersterButton->SetText("klick mich");
  13. this->AddControl(ersterButton);
  14. }
  15.  
  16. public:
  17. ErsteForm()
  18. {
  19. InitializeComponent();
  20. }
  21.  
  22. private: //Neuer private Block, damit es oben übersichtlich bleibt. Die Funktionen dürfen natürlich auch public sein.
  23. void ersterButton_Click(Control *sender) //Funktionen von Steuerelementen sollten einen passenden Namen haben
  24. {
  25.  
  26. }
  27. };
  28.  

Nun hat unser Button schonmal die richtige Beschriftung. Damit er nun auch noch auf Mausklicks reagieren kann, müssen wir seinem
Click-Event unsere Funktion @c ersterButton_Click zuweisen. Um dies zu tun, können wir die Funktion std::bind aus der C++ Standardbibliothek benutzen.
Ein Tutorial zu std::bind könnt ihr hier finden: http://www.oop-mit-cpp.de/stdbib_html/p9.html Die zweite Möglichkeit wäre einen Lambda-Ausdruck zu verwenden, ein Tutorial dazu, gibt es hier: http://www.roth-soft.de/blog/8-c-plus-plus/94-was-sind-eigentlich-lambda-ausdruecke
CPP Code:
  1.  
  2. class ErsteForm : public Form
  3. {
  4. private:
  5. Button *ersterButton;
  6.  
  7. void InitializeComponent()
  8. {
  9. this->SetText("ErsteForm");
  10.  
  11. ersterButton = new Button();
  12. ersterButton->SetText("klick mich");
  13. ersterButton->GetClickEvent() += ClickEventHandler(std::bind(&ErsteForm::ersterButton_Click, this, std::placeholders::_1));
  14. //oder:
  15. //ersterButton->GetClickEvent() += ClickEventHandler([this](Control *sender)
  16. //{
  17. // ersterButton_Click(control);
  18. //});
  19. this->AddControl(ersterButton);
  20. }
  21.  
  22. public:
  23. ErsteForm()
  24. {
  25. InitializeComponent();
  26. }
  27.  
  28. private:
  29. void ersterButton_Click(Control *sender)
  30. {
  31.  
  32. }
  33. };
  34.  

Nun müssen wir nur noch unsere MessageBox anzeigen lassen, wenn auf den Button geklickt wurde. Dazu benutzen wir die OSHGui::MessageBox Klasse mit ihrer Methode @c Show.
CPP Code:
  1.  
  2. class ErsteForm : public Form
  3. {
  4. private:
  5. Button *ersterButton;
  6.  
  7. void InitializeComponent()
  8. {
  9. this->SetText("ErsteForm");
  10.  
  11. ersterButton = new Button();
  12. ersterButton->SetText("klick mich");
  13. ersterButton->GetClickEvent() += ClickEventHandler(std::bind(&ErsteForm::ersterButton_Click, this, std::placeholders::_1));
  14. this->AddControl(ersterButton);
  15. }
  16.  
  17. public:
  18. ErsteForm()
  19. {
  20. InitializeComponent();
  21. }
  22.  
  23. private:
  24. void ersterButton_Click(Control *sender)
  25. {
  26. MessageBox::Show("Ich wurde angeklickt!");
  27. }
  28. };
  29.  

Auch dieses Tutorial ist schon zu Ende, wie man MessageBoxen auswerten kann, erfahrt ihr im nächsten Tutorial.

__________________

Hallo