Witam,siedzę już dosyć długo w tworzeniu aplikacji Windows Forms i zawsze "Customowe" przyciski tworzyłem w taki sposób,że robiłem 3 te same przyciski w Photoshopie,ale z innymi "stylami" (zwykły,najechanie kursorem,wciśnięcie) i łączyłem to za pomocą zdarzeń,że gdy najedzie się na button_0 to pojawia się button_1 a gdy sie na niego kliknie to pojawia się button_2.
Zdaję sobie sprawę,że to nie jest zbyt profesjonalne podejście i chciałem zapytać jak to zrobić,by nie musieć sobie utrudniać życia z każdym przyciskiem zachowując grafiki sporządzone w Photoshopie?
0
0
I jak miałeś na formie 5 przycisków, to do każdego z nich pisałeś metody obsługujące te 3 zdarzenia oddzielnie?
1
class PhotoButton : Button
{
....
}
1
zrób taką klasę - raz a dobrze, potem tylko wrzucasz gotowy komponent na formę bez martwienia się o te zdarzenia za każdym razem.
0
zrobiłem tak:
public class ImageButton : Button
{
picturebox pb1;
...
pb1.Click += new EventHandler(klik);
pb1.MouseEnter +=new Eventhandler(najechanie);
pb1.MouseLeave += new Eventhandler(wyjechanie);
...
}
tak jest poprawnie?
Jeśli tak to potem zastosuje to samo,w innych projektach.
0
Coś mi to nie wychodzi,jeśli możesz to podasz mi w odpowiedzi cały przykładowy kod jak to zrobić ?
2
we własnej klasie nie obsługuj zdarzenia, tylko przeciąż metodę wirtualną.
tu jest przykład podany na OnClick:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onclick%28v=vs.110%29.aspx
pamiętaj o wywołaniu base.OnClick
.
0
Że takie coś?
public class MyButton : Button
{
private Image _onClickImage; // = Properties.Resources.onClickDefault;
private Image _onMouseEnterImage; // = Properties.Resources.onMouseEnterDefault;
private Image _onMouseLeaveImage; // = Properties.Resources.onMouseLeaveDefault;
[ReadOnly(true)]
public sealed override Font Font
{ get { return new Font("Arial", 9F, FontStyle.Italic, GraphicsUnit.Point); } }
// itd...
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
// ...
/* BackgroundImage */ Image = _onClickImage;
}
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
// ...
/* BackgroundImage */ Image = _onMouseEnterImage;
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseEnter(e);
// ...
/* BackgroundImage */ Image = _onMouseLeaveImage;
}
public Image OnClickImage
{
get { return _onClickImage; }
set { _onClickImage = value; }
}
public Image OnMouseEnterImage
{
get { return _onMouseEnterImage; }
set { _onMouseEnterImage = value; }
}
public Image OnMouseLeaveImage
{
get { return _onMouseLeaveImage; }
set { _onMouseLeaveImage = value; }
}
}