OldSchoolHack

Register / Login English

[FAQ] CodeSnippets


icon [FAQ] CodeSnippets #1

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Auf dieser Seite findet ihr verschiedene Code Snippets, die euch bei der Benutzung der GUI weiterhelfen sollen.

Q: Wie kann ich auf ein Event bei einem Steuerelement reagieren, zum Beispiel wenn auf einen Button geklickt wird?
A: Ihr müsst das entsprechende Event von dem Steuerelement abrufen und dann einen EventHandler registrieren.
  Zu diesem gehört immer eine Funktion, die aufgerufen werden soll. Diese Funktion müsst ihr per std::bind oder mit einem Lambda-Ausdruck übergeben.
  Im folgenden Beispiel seht ihr das registieren einer Click-Funktion bei einem Button.
CPP Code:
  1.  
  2. class TestForm : public Form
  3. {
  4. public:
  5. TestForm()
  6. {
  7. Button *button = new Button();
  8. //Variante 1: std::bind
  9. button->GetClickEvent() += ClickEventHandler(std::bind(&TestForm::button_Click, this, std::placeholder::_1));
  10. //Variante 2: Lambda
  11. button->GetClickEvent() += ClickEventHandler([this](Control *sender)
  12. {
  13. button_Click(sender);
  14. });
  15. //Variante 3: Lambda ohne externe Funktion. Achtung: Sollte aus Übersichtsgründen nicht verwendet werden.
  16. button->GetClickEvent() += ClickEventHandler([this](Control *sender)
  17. {
  18. MessageBox::Show("clicked");
  19. });
  20. this->AddControl(button);
  21. }
  22.  
  23. void button_Click(Control *sender)
  24. {
  25. MessageBox::Show("clicked");
  26. }
  27. };
  28.  

Q: Ich habe einen EventHandler registriert, möchte diesen aber manchmal deaktivieren. Wie mach ich das?
A: Dazu muss der EventHandler in einer Variable gespeichert werden, um ihn wiederverwenden zu können.
CPP Code:
  1.  
  2. class TestForm : public Form
  3. {
  4. public:
  5. TestForm()
  6. {
  7. buttonHandler = ClickEventHandler(std::bind(&TestForm::button_Click, this, std::placeholder::_1));
  8.  
  9. Button *button = new Button();
  10. button->GetClickEvent() += buttonHandler;
  11. this->AddControl(button);
  12. }
  13.  
  14. void button_Click(Control *sender)
  15. {
  16. //sender ist in diesem Fall der Button
  17. ((Button*)sender)->GetClickEvent() -= buttonHandler; //lösche ClickEventHandler nach dem ersten Click
  18. }
  19.  
  20. private:
  21. ClickEventHandler buttonHandler;
  22. };
  23.  

Q: Welche Signatur müssen die Funktionen für die EventHandler besitzen?
A:
CPP Code:
  1.  
  2. //SelectedIndexChangedEvent;
  3. void function(Control *sender);
  4.  
  5. //ColorChangedEvent;
  6. void function(Control *sender, Drawing::Color &color);
  7.  
  8. //CheckedChangedEvent;
  9. void function(Control *sender);
  10.  
  11. //TextChangedEvent;
  12. void function(Control *sender);
  13.  
  14. //TickEvent;
  15. void function(Control *sender);
  16.  
  17. //ValueChangedEvent;
  18. void function(Control *sender);
  19.  
  20. //ScrollEvent;
  21. void function(Control *sender, ScrollEventArgs &args);
  22.  
  23. //LocationChangedEvent;
  24. void function(Control *sender);
  25.  
  26. //SizeChangedEvent;
  27. void function(Control *sender);
  28.  
  29. //KeyDownEvent;
  30. void function(Control *sender, KeyEventArgs &args);
  31.  
  32. //KeyPressEvent;
  33. void function(Control *sender, KeyPressEventArgs &args);
  34.  
  35. //KeyUpEvent;
  36. void function(Control *sender, KeyEventArgs &args);
  37.  
  38. //ClickEvent;
  39. void function(Control *sender);
  40.  
  41. //MouseClickEvent;
  42. void function(Control *sender, MouseEventArgs &args);
  43.  
  44. //MouseDownEvent;
  45. void function(Control *sender, MouseEventArgs &args);
  46.  
  47. //MouseUpEvent;
  48. void function(Control *sender, MouseEventArgs &args);
  49.  
  50. //MouseMoveEvent;
  51. void function(Control *sender, MouseEventArgs &args);
  52.  
  53. //MouseScrollEvent;
  54. void function(Control *sender, MouseEventArgs &args);
  55.  
  56. //MouseEnterEvent;
  57. void function(Control *sender);
  58.  
  59. //MouseLeaveEvent;
  60. void function(Control *sender);
  61.  
  62. //MouseCaptureChangedEvent;
  63. void function(Control *sender);
  64.  
  65. //FocusGotEvent;
  66. void function(Control *sender);
  67.  
  68. //FocusLostEvent;
  69. void function(Control *sender, Control *newFocusedControl);
  70.  


__________________

Hallo