[Delphi] invoer valideren

Pagina: 1
Acties:

  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
Ik wil in mijn programma de invoer controleren. Dit kan heel simpel met een 'if then' lusje, maar ik wil liever alle edit componenten op een panel in een keer controleren of er iets is ingevuld of niet.

Opties:
Indien er iets ingevuld is gebeurt er niks.
Indien er niks is ingevuld dan kleuren de lege controls rood.
code:
1
2
3
4
5
6
for I := 0 to PanelBestek.ComponentCount - 1 do
  if PanelBestek.Components[I] is TRxDBLookupCombo then
    if Length(Text) = 0 then
        TRxDBLookupCombo(PanelBestek.Components[I]).Color := clRed
    else
        TRxDBLookupCombo(PanelBestek.Components[I]).Color := clWhite;

Ik gebruik nu de rxlib controls, maar in principe moet er gecontroleerd worden op alle controls behalve labels, panels etc.

Het lijkt zo simpel maar ik kom er niet uit...

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Het is niet zo simpel, want je moet volgens mij voor elk component een aparte handler inbouwen omdat niet alle componenten een property 'text' hebben, en als je die dan toch gaat aanspreken krijg je een foutmelding.

Verwijderd

Nou het valt ook wel mee had je al wel gedebugged want hij klapt er bij de eerste regel van jouw er al uit maar hier is de juiste code succes ermee.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  i : integer;
begin
  for I := 0 to ComponentCount - 1 do
  begin
    if (Components[I] is TComboBox) then
    begin
    if TComboBox(Components[i]).Text = '' then
      TComboBox(Components[i]).color := clRed
    else
      TComboBox(Components[i]).color := clWhite
    end;
  end;
end;

  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
De Componenten die ik gebruik hebben wel een property 'text'. Uiteraard houdt ik hier rekening mee. Ik krijg op de huidige code -geen- foutmelding. Maar het werkt ook niet... :(

  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
OK! ff testen!

Verwijderd

Je code geeft ook geen foutmelding maar als je breakpoints gaat zetten in je code dan kom je er pas achter. Hiermee kan je dus regel voor regel je code checken

  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
Werkt niet... :(

De reden dat ie bij jou een foutmelding gaf op de eerste regel is waarschijnlijk omdat je de componenten niet op een panel hebt staan met de naam "PanelBestek"

Ik heb je code even aangepast aan mijn componenten:
code:
1
2
3
4
5
6
7
8
9
10
for I := 0 to PanelBestek.ComponentCount - 1 do
  begin
    if (PanelBestek.Components[I] is TRxDBLookupCombo) then
    begin
      if TRxDBLookupCombo(PanelBestek.Components[i]).Text = '' then
         TRxDBLookupCombo(PanelBestek.Components[i]).color := clRed
      else
         TRxDBLookupCombo(PanelBestek.Components[i]).color := clWhite
    end;
  end;

Maar ze doen het nog steeds niet... met andere woorden lege velden blijven gewoon wit...

Verwijderd

Je moet ook niet panelbestek ervoor zetten
code:
1
2
3
4
5
6
7
8
9
10
for I := 0 to ComponentCount - 1 do
  begin
    if (Components[I] is TRxDBLookupCombo) then
    begin
      if TRxDBLookupCombo(Components[i]).Text = '' then
         TRxDBLookupCombo(Components[i]).color := clRed
      else
         TRxDBLookupCombo(Components[i]).color := clWhite
    end;
  end;

En zet maar eens een breakpoint op :
for I := 0 to ComponentCount - 1 do

Dan zie je dat ie na de component count met je oude code eruit klapt en met de nieuwe dat ie dan wel verder loopt.

Kijk anders ff in de help op component count of breakpoints als je daar nog nooit mee hebt gewerkt.

succes ermee

  • klaaz
  • Registratie: April 2000
  • Laatst online: 25-08 07:14

klaaz

it's me!

Topicstarter
PanelBestek is de naam van het Panel waarop de te valideren componenten staan. Gebruik ik het niet dan valideert ie alle componenten op mijn form. En dat wil ik niet.

Code werkt niet maar heb ik als volgt aangepast:
code:
1
2
3
4
5
6
7
8
9
10
11
With PanelBestek do
for I := 0 to ControlCount - 1 do
  begin
    if (Controls[I] is TRxDBLookupCombo) then
    begin
      if TRxDBLookupCombo(Controls[i]).Text = '' then
         TRxDBLookupCombo(Controls[i]).color := clRed
      else
         TRxDBLookupCombo(Controls[i]).color := clWhite
    end;
  end;

Met Controlcount werkt het dus... ! :)

Zonder jouw hulp was ik er echter niet zo snel achtergekomen. Dank je wel! :)
Pagina: 1