Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
con un codice riuscivo a visualizzare in un label un nominativo associato ad un server, ad esempio mail.libero.it=infostrada, mail.libero.it compariva in un Tedit e infostrada in un label. Adesso questo codice l'ho modificato per ottenere lo stesso risultato anche per una rubrica ma non vuole funzionare. Posto il codice:
Mi spiace, ma non capisco tutta questa contorsione mentale....
Lista e server sono 2 combobox che riempi con dei valori prelevati da 2 file ini .. e sino a qui .... avrei qualcosa (molto ) da ridire sul codice, ma ... cmq il tuo problema è che usi una sola tstrings caricando dentro prima la rubrica.ini e poi server.ini e dalla stessa lista vuoi estrarre il contatto e il server, ma il contatto è ormai sovrascritto ... secondo me c'e' molta confusione ... e molto codice rindondante
Scrivi una funzione che passando il nome del fini .ini e del combo, carica i valori nel combo destinazione
scrivi una funzione che carica entrambe le liste le fonde e ne restituisce una unica
in questo modo risulta un po' più pulito e comprensibile
Butto giù qualcosa al volo, visto l'orario ... tenendo la stessa tua logica, ovviamente io non ho la visuale su tutti i problemi del tuo applicativo, ma una vista solo parziale del problema.
Ho optato per una singola funzione (Carica) che si prende cura di fare il lavoro di riempimento dei combo e della lista principale e nello stesso tempo restituisce il numero degli elementi presenti, in questo modo c'e' solo un punto delegato a questa azione, questo perchè se ci sarà bisogno di un terzo combo non bisogna triplicare il codice di caricamento, ma basta passare i parametri alla funzione e ci pensa lei. Volendo si potrebbe estremizzare anche la procedura di change, semplicemente assegnando un tag al combo e nell'evento change selezionare il combo prescelto per poi assegnare il valore alla label in base al Tag, forse è più difficile spiegarlo che scriverlo cmq qualcosa del tipo:
procedure TForm1.ComboChange(Sender: TObject);
begin
case (Sender as TcomboBox).Tag of
1: NomeServer.Caption := oListaPublic.Values[(Sender as TcomboBox).Text];
2: Contatto.Caption := oListaPublic.Values[(Sender as TcomboBox).Text];
end;
end;
Entrambi gli eventi change puntano alla stessa procedura, in questo modo abbiamo centralizzato anche la procedura di assegnazione, in modo che nel caso di aggiunta di un terzo combo basta aggiungere una riga alla procedura combochange.
Più riusciamo a tenere il codice compatto e autoparlante più la manutenzione del nostro programma sarà facilitata in futuro...
NB: questa è solo un idea, ovviamente migliorabile
PS: il codice è testato 'al volo'
Guarda la dichiarazione della funzione carica nella sezione private ... e poi guarda come l'hai implementata ... sono 2 classi diverse ... da una parte l'hai chiamata "TRzComboBox" l'altra invece è restata "TComboBox" uniforma con la classe giusta.
cmq... l'errore che ti ha dato delphi mi sembra molto esplicativo
1: NomeServer.Caption:= oListaPublic.Values[(Sender as TRzComboBox).Text];
2: Contatto.Caption:= oListaPublic.Values[(Sender as TRzComboBox).Text];
end;
end;
Mi piace e la vorrei applicare mi daresti una mano a migliorarla?
Devi settare la property tag dei componenti combobox a 1 e a 2 dipende dal tipo, il combo del server avrà tag 1 e il combo del contatto avrà tag 2, entrambi fanno riferimento allo stesso evento ComboChange.
Infatti se leggi il case (case (Sender as TRzComboBox).Tag of) guarda il tag del componente se è 1 fai una cosa se è 2 fai un altra
Ultima modifica effettuata da Goblin il 24/05/2011 alle 16:18