Należy podłączyć się pojedynczy MouseEnter
i MouseLeave
do każdej kontroli, który potrzebuje tej funkcji (zamiast pisać nową wersję każdej metody dla każdej kontroli). Zakładając, że korzystasz z Visual Studio, możesz to zrobić, zmieniając nazwę metody docelowej dla wydarzenia, w okienku właściwości każdego przycisku. Jeśli najpierw napiszesz poniższy kod, ta metoda pojawi się na listach rozwijanych zdarzeń obiektu: MouseEnter
i MouseLeave
.
Kod będzie wtedy trzeba sprawdzić który przycisk, z którego został zwolniony wydarzenie w następujący sposób:
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;
}
Przypuszczam oldColor
jest globalnym? To może się zsynchronizować, jeśli wydarzy się coś "nieparzystego", gdy zdarzenie MouseEnter
zostanie wywołane dla innego przycisku, zanim zostanie przechwycone odpowiednie MouseLeave
. Aby uczynić to bardziej niezawodnym, rozważałbym przechowywanie starego koloru na właściwości Button's .tag
, tak aby był samowystarczalny.
Np
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;
}
(Znacznik jest w zasadzie hak, na których można oznakować „coś” odpowiednie do konkretnej instancji kontroli, że nie ma już nieruchomość za to od rodzaju Object
który. oznacza, że możesz oznaczyć wszystko tam, ale kiedy czytasz z niego, musisz go odesłać z powrotem do dowolnego typu, który tam umieścisz, ale ponieważ jest to Object
możesz umieścić tam wszystko, w tym np. niestandardową klasę zawierającą wiele właściwości, tablicę itp., jeśli chcesz oznaczyć formant więcej niż jedną rzeczą).
Dziękujemy! Dokładnie to, czego chciałem. – davidwroxy
@davidwroxy Absolutnie moja przyjemność partnera, i dzięki za zaakceptować! Zauważam, że rzadko "akceptujesz" inne odpowiedzi, które (mogą) odpowiedzieć na twoje pytania. Jeśli masz chwilę, czy miałbyś/mogłabyś zaznaczać jako "zaakceptowane" te odpowiedzi (jeśli w ogóle), które rozwiązały twoje problemy i/lub głosowały te, które były dla ciebie użyteczne? – Sepster
Właśnie skończyłem oznaczać odpowiedzi, które rozwiązały mój problem. Zapomniałem to zrobić. Dziękuję za przypomnienie. – davidwroxy