Witam
Wlasnie pisze kalkulator i zastanawiam sie czy moge obsluzyc jedne metoda wszystkie butony, i czy w jakis sposob bedzie przydatny operator 'is'?
Witam
Wlasnie pisze kalkulator i zastanawiam sie czy moge obsluzyc jedne metoda wszystkie butony, i czy w jakis sposob bedzie przydatny operator 'is'?
private void AllButton_Click(object sender, EventArgs e)
{
Button senderButton = (sender as Button);
if(senderButton.Name == "dodaj')
{//obsluz dodaj}
}
Lepiej zrobic to na switch i tyle ;)
Marcio chodzilo o to ze AllButockClick dajesz w opcjach kazdego butona i jedna metoda odwolujesz sie do wszystkich metodow. To taka wlasna nazwa funkcji, przynajmniej sam to tak wydedukowalem :)
Z tego co napisal @bartek4833 myslalem ze chodzi o to zeby kazdy button nie mial osobnej metody w klasie a zeby wszystko bylo w jednej...
No tak, dokladnie o to mi chodzilo :)
@maszynaz - czego konkretnie nie rozumiesz?
AllButton_Click
spełnia te warunki.AllButton_Click(object sender, EventArgs e)
spełnia ten warunek dla zdarzenia Button.Click.postawiłem 2 przyciski i napisałem taki kod:
private void All_Click(object sender, EventArgs e)
{
Button senderButton = (sender as Button);
switch (senderButton.Name)
{
case "button2":
button2.Text = "ja";
break;
case "button3":
button3.Text = "ja";
break;
}
}
Nie działa. Dlaczego?
...
Już wiem. Dodałem EventHandlery
this.button2.Click += new System.EventHandler(this.All_Click);
this.button3.Click += new System.EventHandler(this.All_Click);
Teraz działa.
Jeśli dobrze rozumiem to nie można jednego zdarzenia Click podpiąć do tych przycisków które się chce?
Tak BTW, to designery w VS powinny być wyłączone dla użytkowników ze stażem krótkim niż rok. Rozwiązałoby to wszystkie problemy.
Designera też trzeba umieć używać. Ja wiem, że niektórzy myśleniem się nie pasjonują, ale wszystko to można zrobić za pomocą designera. Nawet metody AllButton_Click nie trzeba pisać ręcznie - można automatycznie wygenerować OnClick dla jednego buttona i podpiąć ją do reszty w designerze. Ba - nawet można nazwać w designerze tą metodę AllButton_Click.
somekind napisał(a)
Tak BTW, to designery w VS powinny być wyłączone dla użytkowników ze stażem krótkim niż rok. Rozwiązałoby to wszystkie problemy.
To prawda. Albo przez pierwszy rok zakaz pisania gui i ćwiczenia na eventach i delegatach w konsoli. No ale cóż..
Jeżeli buttony mają wykonywać "coś" zależne od wartości to zamiast robić giga switch-case przepisz te wartość do właściwości tak i potem w metodzie podpiętej do zdarzenia zwyczajnie wystarczy:
if(sender is Button)
((Button)sender).Text = "abc";
lub z wykorzystaniem wspomnianego taga:
Button btn = sender as Button;
if(btn != null)
edtResult.Text += btn.Tag.ToString();
masshter - to był przykład! :-) Równie dobrze mógłbyś się przyczepić, że tam jest "abc", bo przecież "abc" nic konkretnego nie znaczy.
Warto też pamiętać, że ogólnym przypadku długa metoda z ifami/switchem obsługująca wiele przycisków o różnych funkcjach, jest poważnym błędem i utrudnianiem sobie życia. (Niektórzy początkujący, ale i nie tylko, wpadają na takie pomysły.)