Obsluga butonow za pomoca 1 metody

0

Witam

Wlasnie pisze kalkulator i zastanawiam sie czy moge obsluzyc jedne metoda wszystkie butony, i czy w jakis sposob bedzie przydatny operator 'is'?

0
 
        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 ;)

0

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 :)

0

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...

0

No tak, dokladnie o to mi chodzilo :)

0

@maszynaz - czego konkretnie nie rozumiesz?

  1. Metody można nazywać dowolną kombinacją liter, cyfr i znaków podkreślenia, zaczynając od litery. AllButton_Click spełnia te warunki.
  2. Jedna metoda obsługująca zdarzenie może być ustawiona jak event handler dla dowolnej liczby zdarzeń dowolnych obiektów, o ile tylko sygnatura tej metody odpowiada sygnaturze zdarzenia. AllButton_Click(object sender, EventArgs e) spełnia ten warunek dla zdarzenia Button.Click.
  3. W tym przypadku (WinForms) senderem jest kontrolka, na której akcji dokonał użytkownik, konkretnie wciśnięty przez niego przycisk.
0

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.

0

Jeśli dobrze rozumiem to nie można jednego zdarzenia Click podpiąć do tych przycisków które się chce?

0

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.

0

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óż..

0

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();
0

masshter - to był przykład! :-) Równie dobrze mógłbyś się przyczepić, że tam jest "abc", bo przecież "abc" nic konkretnego nie znaczy.

0

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.)

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