2015-01-05 23 views
6

Sto cercando un modo per utilizzare una procedura per più pulsanti. È per un quiz come se dovessi premere il pulsante 1 per la domanda 1, ma copiare e incollare l'intero codice per 36 pulsanti e cambiare le variabili per 36 pulsanti non è davvero divertente per nessuno.Esiste un modo per utilizzare UNA procedura per più pulsanti in Pascal?

così ho pensato che qualcosa di simile sarebbe possibile:

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

X è la variabile.

È qualcosa del genere possibile o ci sono altri modi per acquisire lo stesso risultato?

+0

Recuperare "x" da TButton (mittente) .name, invece? Basta scorrere all'indietro per ottenere cifre numeriche. –

risposta

6

Il modo più semplice per farlo è:

  1. Numero i pulsanti che utilizzano la proprietà Tag in Inspector (o in codice quando vengono creati) per raccontare facilmente a parte. (Oppure assegnare il valore che si desidera passare alla procedura/funzione quando si fa clic su quel pulsante.)

  2. Creare un gestore di eventi e assegnarlo a tutti i pulsanti che si desidera gestire con lo stesso codice.

  3. Il parametro Sender che riceve l'evento sarà il pulsante su cui è stato fatto clic, che è possibile quindi trasmettere come TButton.

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

Bene, grazie gentilmente, signore, per l'aiuto. Comunque sono abbastanza se non proprio inesperto con Pascal quindi ... Potrei approfondire sul punto 2 se saresti così gentile? Come se non sapessi davvero come usare Event Handler e tanto meno crearne uno da zero anche se è di base. – Pascalerino

+0

Fare doppio clic su uno dei pulsanti nell'IDE, che creerà la shell della routine (ad esempio, "Button1Click"). Usa la scheda Eventi per quel pulsante nell'Object Inspector per rinominarlo in qualcosa di più generico (come "ButtonsClick"). Ctrl-clic su tutti i pulsanti del modulo per condividere lo stesso evento, passare alla scheda Eventi di ispezione oggetti e selezionare quell'evento generico 'ButtonsClick' come gestore OnClick per tutti i pulsanti. (Oppure assegnalo a ciascuno di essi separatamente usando l'Object Inspector.) –

+0

Bene, grazie, questo lo rende molto più chiaro! Ma una domanda più veloce è come posso assegnare Tbutton.tag a una variabile? QuestionNumber: = TButton.Tag; non funzionerà per ovvi motivi – Pascalerino