2015-01-05 17 views
6

Szukam sposobu użycia jednej procedury dla wielu przycisków. To dla quizu, jak w przypadku pytania 1, trzeba nacisnąć przycisk 1, ale skopiowanie i wklejenie całego kodu na 36 przycisków i zmiana zmiennych dla 36 przycisków nie jest dla nikogo zabawna.Czy istnieje sposób użycia JEDNEJ procedury dla wielu przycisków w Pascalu?

Pomyślałem więc coś takiego byłoby możliwe:

procedure TForm1.Button[x]Click(Sender: TObject); 
begin 
    DoTask[x]; 
end; 

X jest zmienna.

Czy coś takiego jest możliwe, czy istnieją inne sposoby uzyskania tego samego rezultatu?

+0

Pobieranie "X" z TButton (nadawcy) .name zamiast? Po prostu skanuj wstecz w poszukiwaniu cyfr. –

Odpowiedz

6

Najprostszym sposobem na to jest:

  1. Ilość przycisków za pomocą właściwości w Inspektorze obiektów (lub w kodzie, gdy są one utworzone) Tag aby łatwo odróżnić je od siebie. (Lub przypisz wartość, którą chcesz przekazać do swojej procedury/funkcji, po kliknięciu tego przycisku.)

  2. Utwórz jedną obsługę zdarzeń i przypisz ją do wszystkich przycisków, którymi chcesz obsłużyć ten sam kod.

  3. Parametrem Sender, które otrzyma zdarzenie, będzie kliknięty przycisk, który można następnie odrzucić jako TButton.

    procedure TForm1.ButtonsClick(Sender: TObject); 
    var 
        TheButton: TButton; 
    begin 
        TheButton := Sender as TButton; 
        DoTask(TheButton.Tag); 
    end; 
    
+0

Cóż, dziękuję uprzejmie proszę pana za pomoc. Jednak jestem całkiem niezupełnie niedoświadczony przez Pascala, więc ... Czy mógłbyś rozwinąć krok 2, jeśli byłbyś tak dobry? Tak jak ja nie wiem jak używać Event Handler, nie mówiąc już o stworzeniu od podstaw, nawet jeśli jest to podstawowy. – Pascalerino

+0

Kliknij dwukrotnie dowolny przycisk w IDE, który utworzy powłokę procedury (na przykład 'Button1Click'). Użyj zakładki Zdarzenia dla tego przycisku w Inspektorze obiektów, aby zmienić nazwę na coś bardziej ogólnego (np. 'ButtonsClick'). Kliknij z naciśniętym klawiszem Ctrl wszystkie przyciski formularza, które chcesz udostępnić temu zdarzeniu, przejdź do karty Zdarzenia Inspektora obiektów i wybierz to ogólne zdarzenie 'ButtonsClick' jako procedurę obsługi OnClick dla wszystkich przycisków. (Lub po prostu przypisz je każdemu z nich osobno za pomocą Inspektora obiektów.) –

+0

Dzięki, dzięki czemu jest bardziej przejrzysty! Ale jeszcze jedno szybkie pytanie brzmi: jak mogę przypisać Tbutton.tag do zmiennej? QuestionNumber: = TButton.Tag; nie zadziała z oczywistego powodu. – Pascalerino

Powiązane problemy