Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    145

    [Delphi 7] Problema TCheckBox

    Ciao a tutti! ecco il mio problema : il mio programma crea 5 TCheckBox quando l'utente clicca su un certo bottone. In un secondo momento io vorrei verificare quali dei 5 checkbox è fleggato ma come faccio a verificare la proprietà 'checked' se non ho il riferimento all'oggetto (infatti so solo il nome)? In pratica volevo chiedervi se, avendo solo il nome dell'oggetto(in stringa), è possibile referenziarsi all'oggetto stesso? devo effettuare qualche Cast o altro?

    Grazie mille!!!!!

  2. #2
    Si puoi fare così:

    codice:
       TCheckBox(FindComponent('MyCheckBox')).Checked
       then ...

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    La soluzione ottimale sarebbe memorizzare i riferimenti ai controlli CheckBox creati a runtime in una lista, poichè la FindComponent tende a diventare sempre più "pesante" man mano che il numero di componenti cresce sul form (poichè l'elenco dei componenti viene scandito ogni volta che se ne cerca uno)...

    ...ma per 5 sole CheckBox la soluzione di Daniele è perfetta!

    Inutile complicarsi la vita quando non è necessario.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    145
    Ok! grazie mille!!!!!!!!
    E se creassi un array dinamico di TCheckbox?

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    Ti dirò...se le CheckBox sono 5, non valeva nemmeno la pena di scandirle con un ciclo, ma bastava dare loro un nome significativo.

    Se devi utilizzare un array dinamico, allora ti suggerisco una lista, che si gestisce più facilmente ed è meno vulnerabile ad errori di programmazione, senza contare il fatto che un array dinamico deve essere ridimensionato opportunamente dal programmatore e non gode delle migliori performance.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    145
    Ok grazie! se invece creassi in run-time degli oggetti Intraweb IWLink (TIWLink) come posso vedere quale IWLink è stato cliccato???

    Thanks u!!!!

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    Devi creare un metodo per il form compatibile con l'evento che vuoi gestire e associarlo tramite codice.

    Ad esempio, si può aggiungere ad una form un metodo del tipo
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      il codice qui...
    end;
    e associarlo all'evento del controllo visuale o componente creato a runtime in questo modo:
    codice:
    var
      MyButton: TButton;
    begin
      MyButton := TButton.Create(Self);
      MyButton.Parent := Self;
      MyButton.OnClick := Button1Click;
    end;
    Questo esempio riguarda un TButton, ma il procedimento è applicabile a qualsiasi altro componente o controllo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    145
    ok grazie! ho provato a fare come dici tu e funziona se creo solo un oggetto! se ne creo + di uno in runtime come faccio a vedere quale IWLink è stato cliccato? (oppure nel tuo esempio quale bottone è stato premuto)

    grazie mille!!!!


  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    E' il parametro Sender che identifica il controllo che ha generato l'evento. Attraverso tale parametro, dopo averlo "castato" al tipo di controllo/componente interessato, potrai identificare su quale elemento è stato riscontrato l'evento esaminando le proprietà Name, Tag, ecc.

    codice:
      if TIWLink(Sender).Name = 'IWLink1' then
        ...
    (codice di esempio non verificato)

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    145
    Se viceversa so il nome dell'oggetto (es : TIWLink1) come posso referenziarmi all'oggetto con questo nome???

    grazie millllllllle!!!!!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.