Salve a tutti.
Se in una form ho 8 controlli di tipo edit che si chiamano (E1.....E8), come posso controllare, in maniera veloce, che l'utente non abbia inserito valori duplicati ?
Grazie
Salve a tutti.
Se in una form ho 8 controlli di tipo edit che si chiamano (E1.....E8), come posso controllare, in maniera veloce, che l'utente non abbia inserito valori duplicati ?
Grazie
Dopo anni di programmazione amatoriale in VBA, ho deciso di passare a VB.NET
puoi iterare sui componenti.
In questo esempio banale vedi come (so caxxi tuoi controllare la duplicazione).
Puoi operare in tanti modi, ad esempio dando dei nomi specifici ai componenti tipo "editordacontrollare1", "editordacontrollare2" e così via.
Nel ciclo metterai un
Per scartare altri tedit che non c'entrano (se ci sono)codice:if pos('editordacontrollare',lowercase(form1.components[i].name))=1 then ... questo è da tenere in considerazione.
codice:for i:=0 to form1.componentcount-1 do if form1.components[i] is TEdit then TEdit(form1.components[i]).text := 'Ciao '+inttostr(i)+form1.components[i].name;
Grazie.![]()
Dopo anni di programmazione amatoriale in VBA, ho deciso di passare a VB.NET
Io "personalmente" eviterei un ciclo componentcount nel caso nella tua form ci sono 300 componenti ogni volta per controllarne solo 8 li devi scandire sempre tutti e 300.
Io, sempre "personalmente", opterei per un FindComponent, lasciando alla VCL il ciclo di ricerca, e controllo gli altri 7 all'uscita del TEdit.
Qualcosa del tipo:
PS: codice buttato giù "al volo" ... da testarecodice:nella dichiarazione Private: private AeditName: Array[1..8] of string; ... nel create della form assegno i nomi: AeditName[1] := 'Edit1'; AeditName[2] := 'Edit2'; AeditName[3] := 'Edit3'; AeditName[4] := 'Edit4'; AeditName[5] := 'Edit5'; AeditName[6] := 'Edit6'; AeditName[7] := 'Edit7'; AeditName[8] := 'Edit8'; nel controllo OnExit di tutti e 8 i componenti il controllo vero e proprio: procedure TForm1.OnExitEdit1(Sender: TObject); Var sStringa: String; x: Integer; begin sStringa := (Sender as TEdit).Text; // variabile di comodo ... for x := Low(AeditName) to High(AeditName) do begin if AeditName[x] <> (Sender as TEdit).Name then if sStringa = (FindComponent(AeditName[x]) as TEdit).text then begin ShowMessage('Valore duplicato in: '+AeditName[x]); (Sender as TEdit).SetFocus; (Sender as TEdit).Clear; Break; end; end; end;
N95
Grazie
Dopo anni di programmazione amatoriale in VBA, ho deciso di passare a VB.NET