Zdarzeń nie można przenosić, każde zdarzenie to funkcja i jest połączone z konkretnym obiektem.
Przykład. Masz na formularzu Form1 komponent Button1 i utworzone dla niego zdarzenie OnClick, ale chcesz mieć możliwość wywoływania tego zdarzenia zarówno na Form1 jak i Form2, jest to możliwe dzięki mechanizmowi zwanemu
rzutowaniem i przypisaniem polimorficznym. Przekazywanie zdarzeń odbywa się poprzez obiekt Sender klasy TObject. Do zdarzenie OnClick przycisku Button1, możesz się odwołać w innym zdarzeniu lub funkcji, ale musisz najpierw "połączyć" ze sobą obydwa formularze, tak żeby "wiedziały o własnym istnieniu", dokładny opis znajdziesz
w serwisie Cyfrowy
Baron w dziale: teoria | przekazywanie obiektów i funkcji pomiędzy formularzami.
Formularze "powiadamiasz o sobie" w ten sposób, że w plikach źródłowych obu formularzy w sekcji include umieszczasz odwołanie do drugiego formularza, czyli w skrócie coś takiego:
- Kod: Zaznacz cały
#include "Unit1.h"
#include "Unit2.h"
Teraz np. na formularzu Form2 umieszczasz jakiś przycisk np. MyButton1 i chcesz w nim wywołać zdarzenie OnClick przycisku Button1 z formularza Form1, robisz to w ten sposób:
- Kod: Zaznacz cały
void __fastcall TForm2::MyButton1Click(TObject *Sender)
{
Form1->Button1Click(Sender);
}
Ze zdarzeniem OnClick UpDown13 z Twojego przykład sytuacja jest nieco bardziej skomplikowana, gdyż to zdarzenie pobiera dwa argumenty, pierwszy to Sender, drugi to wskaźnik do obiektu typu TUDBtnType i tutaj trzeba przekazać dokładnie taki typ obiektu lub konkretną wartość pasującą do typu. Trzeba wiedzieć jak działa dane zdarzenie, a OnClick obiektu TUpDown działa mniej więcej w ten sposób, że sprawdza, czy kliknięto w strzałkę do góry czy do dołu, jeżeli odwołasz się do tego zdarzenie w zdarzeniu OnClick jakiegoś przycisku typu TButton, to musisz przekazać konkretną wartość, gdyż zdarzenie OnClick Button'a sprawdza tylko kliknięcie, nie wie nic o klikaniu w strzałki, dlatego trzeba to wywoływać tak:
- Kod: Zaznacz cały
void __fastcall TForm2::MyButton2Click(TObject *Sender)
{
Form1->UpDown13Click(Sender, btNext); // btNext odpowiada kliknięciu w górną strzałkę
// można też przekazać wartość btPrev odpowiadającą kliknięciu w dolną strzałkę
}
Jeżeli jednak odwołujesz się do zdarzenie OnClick obiektu UpDown z formularza Form1 w zdarzeniu OnClick obiektu UpDown formularza Form2 to robisz to tak
- Kod: Zaznacz cały
void __fastcall TForm2::UpDown1Click(TObject *Sender, TUDBtnType Button)
{
Form1->UpDown13Click(Sender, Button);
}
Mam nadzieję, że już rozumiesz jak to działa.
Zalecam również przeczytanie artykułu
w serwisie Cyfrowy
Baron w dziale: teoria | rzutowanie typoów, przypisanie polimorficzne, gdyż jest to dokładnie tym czego potrzebujesz do swoich celów.