Różne zdarzenia i delegacje.

0

Witam.

Mam sobie metodę którą coś tam wykonuje po kliknięciu buttona.

        private void btnPokaz_Click(object sender, EventArgs e)
        {
             MessageBox.Show("Cos tam");
        }

Chce żeby ta sama metoda była wywoływana np. po naciśnieńciu klawisza enter przy textboxie:

        private void txtSlowoK_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Return)
            {
                 //wywołanie metody z buttonem (tak obrazowo)
            }
        }

I tu jest problem bo zdazeniu KeyDown nie moge przypisać metody ze zdarzenia Click bo przeciez mają różne delegacje.
Czy da się to jakoś zrobić bez tworzenia pomocniczej metody?

0
  1. Co zlego w uzyciu pomocniczej metody? IMO tak jest elegancko.
  2. Nie maja roznych delegacji, bo zauwaz, ze KeyEventArgs jest pochodna EventArgs, wiec z czystym sercem mozesz podac obiekt tego typu jako drugi parametr metody btnPokaz_Click.
0

Tworzenie jak to nazwałeś "pomocniczej" metody jest wręcz wskazane!, ogólnie z mojego doświadczenia wiem, że dobrze jest do obsługi zdarzenia rzucić jedynie wywołanie metody go obsługującej. Główną korzyścią jest możliwość wielokrotnego wykorzystania kodu, na przykład w wypadku gdy dane czynności mają być wykonane przy wciśnięciu przycisku i otwieraniu pliku. Nie musisz pisać słowa kluczowego private, jeśli go nie podasz taki klasyfikator dostępu kompilator przydzieli z automatu.

        void btnPokaz_Click(object sender, EventArgs e)
        {
            PokazMsgbox();
        }

        void txtSlowoK_KeyDown(object sender, KeyEventArgs e)
        {
            ObslugaTxtKeyDown(e);
        }

        void ObslugaTxtKeyDown(KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Return)
            {
                PokazMsgbox();
            }
        }

        void PokazMsgbox()
        {
            MessageBox.Show("Cos tam");
        } 
0
johny_bravo napisał(a)

zauwaz, ze KeyEventArgs jest pochodna EventArgs
Fakt, dzięki.
Ale mimo wszystko delegacje są różne bo kompilator zdarzeniu KeyDown nie przypisze innej delegacji powiazanej z metodą od zdarzenia Click.

morethanchaos napisał(a)

Nie musisz pisać słowa kluczowego private
Wiem. Środowisko samo generuje modfikator dostępu, poza tym jest to raczej dobrym nawykiem niż złym ;)

0

inny sposób, wręcz idelany dla tekiego przykładu:

        private void btnPokaz_Click(object sender, EventArgs e)
        {
             MessageBox.Show("Cos tam");
        }
        private void txtSlowoK_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Return)
            {
                 btnPokaz.PerformClick();
            }
        }

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