Sposób wyzwalania zdarzen w przycisku.

0

Witam,

Potrzebuję zdarzenia które wykryje najazd myszy na przycisk-tu uprzedzam: istnieje takowe, ale tylko wtedy kiedy

 button.enabled == true; 

.
Wpadłem na pomysł zrobienia "swojego" przycisku, mianowicie:
-stworzylem nowa klase o nazwie MojPrzycisk ktora dziedziczy po klasie Button.
-w klasie MojPrzycisk zdefiniowalem zdarzenie typu EventHandler. I tu pojawił się problem: nie mam pojęcia w jaki sposób je wyzwolić, sama metoda "zauważająca" nie jest problemem, chodzi mi tylko o sposób zeby ta metode wywołać.

funkcja zwrotna czy coś w ten deseń?

0
private void Form1_Load(object sender, EventArgs e)
 {
        button1_Click(this, EventArgs.Empty);//odpalenie eventa 
 }

 private void button1_Click(object sender, EventArgs e)
 {
        button1.Text = "halo";
 }
 

Metodą button1.Invoke(...) też się chyba da, ale nie wiem, trzeba sprawdzić.

0

Musi zaistnieć jakaś sytuacja, która sprawi że należy wyzwolić zdarzenie.

class MyClass
{
  public event EventHandler MyEvent;

  void PrzetwarzanieKtoreSkutkujeWyzwoleniemZdarzenie()
  {
    ...
    if (MyEvent != null) // czyli jest podpięta jakaś metoda obsługi
      MyEvent(this, EventArgs.Empty);
    ...
  }
}
0

Chodzilo mi tylko o to, w jaki sposob metoda (OnClick(...) w przykladzie) jest wywolana a w efekcie jest "zauwazane zdarzenie".

To o co mi chodzilo zrealizowalem w ponizszy sposób:

 
    public class MojPrzycisk : Button
    {
        public MojPrzycisk()
            : base()
        {
        }        

        public event EventHandler mojeZdarzenie;

        protected override void OnClick(EventArgs e)
        {
            //tutaj moje dodatkowe instrukcje, do wywolania mojego zdarzenia, na moich warunkach
            if (mojeZdarzenie != null)
                mojeZdarzenie(this, e);
            base.OnClick(e); //baze rowniez wywoluje aby zdarzenie Click zaistnialo. 
        }
    }

Po takiej "modyfikacji" zdarzenie które sam dodałem, ukazuje się na liscie zdarzen "domyslnych", zdarzenie "Click" oraz "mojeZdarzenie" jest wyzwalane bezproblemowo.
Nie wiem czy wystarczajaco to wyjaśnilem, jesli cos bedzie w dalszym ciagu niejasne, postaram sie to opisać bardziej obrazowo.

0

Tzn. chciałeś zdefiniować własne zdarzenie i je wyzwolić? To chyba to już zrobiłeś...

0

Wyzwolić? Chyba wywołać.

0

Zdarzenia się "fired" czyli bardziej już wyzwolić niż wywołać. Ja mówię odpalać.

0

Czyli co, jest buton, jest gotowa reakcja na kliknięcie, tudzież gotowa reakcja na "wjechanie myszom" w obszar... tylko kto tą mysz nosi? ano system operacyjny. Ba, systemy operacyjne to takie miłe i uprzejme ficzery, że raczą informować każdego kto sobie tego życzy, co się dzieje aktualnie z... między innymi z urządzeniem zwanym myszą.
wystarczy nasłuchiwać, i czekać na odpowiednie zdarzenie... i odpalić w ślad za wjebaniem się myszy w obszar jaki tam sobie chcemy.
Jakie zdarzenie, o co chodzi? trza sobie znaleźć w dokumentacji. Współżycie z własnym systemem odbywa się API. Środowiskowe helpy na pewno mają doskonale opisane jak nasłuchiwać system pod kontem myszy, na przykład.

... no chyba że czegoś nie skumałem....

//acha, deaktywujesz butona, a tak naprawdę zmieniasz zdanie, i chcesz aby kontrolka jednak reagowała... kombinuj pan, kombinuj....

0

Udalo sie to zrobic w troche inny sposb (za pomoca zdarzenia mousemove na kontrolce w ktorej jest button) po wjechaniu myszy na obszar w ktorym znajduje sie przycisk (ktory kiedy jest deaktywowany staje sie jakby czescia kontrolki na ktorej siedzi, i nie jest on wyrozniany jako osobne pole) zdarzenie jest wyzwolone.

O api myslalem, ale bylo mi to na szybko potrzebne, a zeby znalezc biblioteke do myszki i obsluzyc metody to zeszloby mi ze 3 dni (chyba ze znalazbym gotowca gdzies w internecie).

0

Tak dla ścisłości - nie staje się "tak jakby częścią kontrolki na której siedzi". Sprawa jest prosta, jeżeli ustawisz Enabled na false, to od tego momentu do przycisku nie docierają komunikaty od systemu i nie są z niego wysyłane. Dla systemu w takim wypadku ten przycisk wygląda tak jakby nie istniał, więc skoro go nie ma no to komunikaty polecą do okna, które jest pod nim(przycisk to też okno - na poziomie API windowsa).

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