Poprawne Przyciski

0

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

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

@Azarien

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; }
		}
	}

1 użytkowników online, w tym zalogowanych: 0, gości: 1