Sie sollten ein einzelnes MouseEnter
und MouseLeave
mit jedem Steuerelement verdrahten, das diese Funktionalität benötigt (anstatt eine neue Version jeder Methode für jedes Steuerelement zu schreiben). Angenommen, Sie verwenden Visual Studio, können Sie dies tun, indem Sie den Namen der Zielmethode für das Ereignis im Eigenschaftenbereich der jeweiligen Schaltfläche ändern. Wenn Sie zuerst den folgenden Code schreiben, wird diese Methode in den Dropdown-Listen der Ereignisse MouseEnter
und MouseLeave
angezeigt.
Der Code würde dann brauchen , die Taste auf der das Ereignis wurde gefeuert zu überprüfen, wie folgt:
private void btnWithHoverBorder_MouseEnter(object sender, EventArgs e)
{
Button eventButton = (Button) sender;
oldColor = eventButton.FlatAppearance.BorderColor;
eventButton.FlatAppearance.BorderColor = mouseOverColor;
}
private void btnWithHoverBorder_MouseLeave(object sender, EventArgs e)
{
Button eventButton = (Button) sender;
eventButton.FlatAppearance.BorderColor = oldColor;
}
Ich nehme an oldColor
ein globaler ist? Dies kann nicht mehr synchron sein, wenn etwas "Ungewöhnliches" passiert, bei dem Ihr MouseEnter
Ereignis für eine andere Taste ausgelöst wird, bevor die entsprechende MouseLeave
abgefangen wird. Um dies robuster zu machen, würde ich in Betracht ziehen, die alte Farbe auf der .tag
-Eigenschaft der Schaltfläche zu speichern, sodass sie eigenständig ist.
ZB:
private void btnWithHoverBorder_MouseEnter(object sender, EventArgs e)
{
Button eventButton = (Button) sender;
eventButton.tag = eventButton.FlatAppearance.BorderColor;
eventButton.FlatAppearance.BorderColor = mouseOverColor;
}
private void btnWithHoverBorder_MouseLeave(object sender, EventArgs e)
{
Button eventButton = (Button) sender;
eventButton.FlatAppearance.BorderColor = (Color)eventButton.tag;
}
(Der Tag ist im Grunde ein Haken, an die „alles“ zu einer bestimmten Instanz einer Kontrolle zu markieren, dass es für die nicht bereits eine Eigenschaft Es ist vom Typ Object
die. bedeutet, dass Sie dort alles markieren können, aber wenn Sie davon lesen, müssen Sie es auf den Typ zurückgeben, den Sie dort platziert haben, aber da es sich um eine Object
handelt, können Sie dort auch eine benutzerdefinierte Klasse einfügen, die mehrere enthält Eigenschaften, oder ein Array, usw., wenn Sie ein Steuerelement mit mehr als einer Sache markieren müssen).
Danke! Genau das, was ich wollte. – davidwroxy
@davidwroxy Absolut mein Vergnügen Kumpel, und danke für das Akzeptieren! Ich nehme zur Kenntnis, dass Sie selten andere Antworten "akzeptiert" haben, die Ihre Fragen beantwortet haben. Wenn Sie einen Moment Zeit haben, würden Sie diese Antworten (falls vorhanden) als "akzeptiert" markieren, die Ihre Probleme gelöst und/oder diejenigen, die Ihnen nützlich waren, verbessert haben? – Sepster
Ich habe gerade die Antworten markiert, die mein Problem gelöst haben. Ich habe vergessen, das zu tun. Danke, dass du mich daran erinnerst. – davidwroxy