OldSchoolHack GUI
Code Snippets

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.

class TestForm : public Form
{
public:
TestForm()
{
Button *button = new Button();
//Variante 1: std::bind
button->GetClickEvent() += ClickEventHandler(std::bind(&TestForm::button_Click, this, std::placeholder::_1));
//Variante 2: Lambda
button->GetClickEvent() += ClickEventHandler([this](Control *sender)
{
button_Click(sender);
});
//Variante 3: Lambda ohne externe Funktion. Achtung: Sollte aus Übersichtsgründen nicht verwendet werden.
button->GetClickEvent() += ClickEventHandler([this](Control *sender)
{
MessageBox::Show("clicked");
});
this->AddControl(button);
}
void button_Click(Control *sender)
{
MessageBox::Show("clicked");
}
};

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.

class TestForm : public Form
{
public:
TestForm()
{
buttonHandler = ClickEventHandler(std::bind(&TestForm::button_Click, this, std::placeholder::_1));
Button *button = new Button();
button->GetClickEvent() += buttonHandler;
this->AddControl(button);
}
void button_Click(Control *sender)
{
//sender ist in diesem Fall der Button
((Button*)sender)->GetClickEvent() -= buttonHandler; //lösche ClickEventHandler nach dem ersten Click
}
private:
ClickEventHandler buttonHandler;
};

Q: Welche Signatur müssen die Funktionen für die EventHandler besitzen?
A:

//SelectedIndexChangedEvent;
void function(Control *sender);
//ColorChangedEvent;
void function(Control *sender, Drawing::Color &color);
//CheckedChangedEvent;
void function(Control *sender);
//TextChangedEvent;
void function(Control *sender);
//TickEvent;
void function(Control *sender);
//ValueChangedEvent;
void function(Control *sender);
//ScrollEvent;
void function(Control *sender, ScrollEventArgs &args);
//LocationChangedEvent;
void function(Control *sender);
//SizeChangedEvent;
void function(Control *sender);
//KeyDownEvent;
void function(Control *sender, KeyEventArgs &args);
//KeyPressEvent;
void function(Control *sender, KeyPressEventArgs &args);
//KeyUpEvent;
void function(Control *sender, KeyEventArgs &args);
//ClickEvent;
void function(Control *sender);
//MouseClickEvent;
void function(Control *sender, MouseEventArgs &args);
//MouseDownEvent;
void function(Control *sender, MouseEventArgs &args);
//MouseUpEvent;
void function(Control *sender, MouseEventArgs &args);
//MouseMoveEvent;
void function(Control *sender, MouseEventArgs &args);
//MouseScrollEvent;
void function(Control *sender, MouseEventArgs &args);
//MouseEnterEvent;
void function(Control *sender);
//MouseLeaveEvent;
void function(Control *sender);
//MouseCaptureChangedEvent;
void function(Control *sender);
//FocusGotEvent;
void function(Control *sender);
//FocusLostEvent;
void function(Control *sender, Control *newFocusedControl);