Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    74

    [delphi xe3]: controllo duplicati dati su edit.text

    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

  2. #2
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    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
    codice:
    if pos('editordacontrollare',lowercase(form1.components[i].name))=1 then ... questo è da tenere in considerazione.
    Per scartare altri tedit che non c'entrano (se ci sono)


    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;

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    74
    Grazie.
    Dopo anni di programmazione amatoriale in VBA, ho deciso di passare a VB.NET

  4. #4
    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:
    codice:
    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;
    PS: codice buttato giù "al volo" ... da testare

    N95

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    74
    Grazie
    Dopo anni di programmazione amatoriale in VBA, ho deciso di passare a VB.NET

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 © 2026 vBulletin Solutions, Inc. All rights reserved.