![]() |
Return to Sender
Hallo Ihr alle!!
Ich weiß jetzt nicht wirklich ob ich hier richtig bin, wenn nicht möge mir man dies verzeihen. Doch leider finde ich eine Funktion nicht wieder die ich mal vor geraumer Zeit gesehen hatte. Vielleicht kann mir einer von euch weiter helfen. Es geht um folgendes: Ich habe mehrere Edit Felder die ich nach einem betätigen eines Buttons abfrage. Wenn jetzt ein Feld leer ist soll das Programm dort hin springen und einen Eintrag direkt ermöglichen. Ich meine ich hätte da mal eine Funktion gesehen die irgendwie mit "setfocus Sender Tedit" oder so ähnlich. Leider weiß ich das nicht mehr genau. von der abfrage her stelle ich mir das irgendwie so vor: if Edit1.Text = '' or if edit2.Text = '' usw.... then und dann sollte er zum ersten leeren feld springen. Ich hoffe ihr könnt mit meiner Beschreibung etwas anfangen und mir weiter helfen Danke und Gruß Murdock |
Re: Return to Sender
Hai Murdock,
meinst Du das so:
Delphi-Quellcode:
begin
if blubb = blubb then begin Edit1.SetFocus; end; end; |
Re: Return to Sender
so in etwa müsste das aussehen !
Delphi-Quellcode:
for i := 0 to ComponentCount -1 do
if Component[i] is TEdit then if (Component[i] as Tedit).Text = '' then begin (Component[i] as TEdit).SetFocus; break; end; |
Re: Return to Sender
Hallo Sharky
Nein nicht wirklich. Ich versuch es mal anders: if Edit1.Text = '' Then edit1.SetFocus; end; if Edit2.Text = '' Then edit2.SetFocus; end; . . . usw. // insgesamt 10 Edit Felder Das Problem ist jetzt beim Ablauf er überrüft das 1. Feld merkt ist leer und springt dahin. Ich stell mir das so vor er überprüft erst alle Felder und Springt dann zum ersten LEEREN Feld und markiert die anderen in einer anderen Farbe. Ich hoffe so ist verständlicher ( ist gar nicht so einfach Probleme zu erklären) :wall: Murdock |
Re: Return to Sender
wie wärs mit 'nem array ?
Delphi-Quellcode:
var myEditArray : array [0..9] of TEdit;
.......//initialisieren der EDitfelder usw. for i :=0 to 9 do if myEditArray[i].Text = '' then begin myEditArray[i].SetFocus; break; end |
Re: Return to Sender
Eine weiter Möglichkeit besteht darin sich die fehlerhaften Felder zu merken und erst am Schluß
das ganze zu handhaben. Das wär dann in etwa folgender Code:
Delphi-Quellcode:
Hoffe das hilft. Ausprobiert hab ich es allerdings jetzt nicht.
var errlist : TObjectlist;
begin errlist := TObjectlist.create.... //Hier wird geprüft und die entsprechenden edits ggf. in die liste eingetragen if (edit1.text = '') then errlist.add(edit1); if (edit2.text = '') then errlist.add(edit2); : //Wenn Fehler da sind, dann tu was... if (errlist.count > 0) then begin for I := 0 to errlist.count -1 do begin Tedit(errlist.items[i]).color := clLime; if (i = 0) then Tedit(errlist.items[i]).setfocus; end; end; //Wichtig...die Liste wieder freigeben. Nicht aber die edits !! errlist.free; end; Gruß Uwe |
Re: Return to Sender
Danke für die Vorschläge.
Ich werde jetzt mal schauen welcher für mich (Anfänger) am besten einzubauen ist. Vielen Dank Murdock |
Re: Return to Sender
Zitat:
Delphi-Quellcode:
Ein paar kleine Anmerkungen:
function isValid(const s : String) : Boolean;
begin result := s <> ''; // oder halt beliebig anders end; ... ... var i : Integer; buffer : TControl; begin buffer := nil; for i := 0 to self.ControlCount - 1 do begin if self.Controls[i] is TEdit then begin if not self.isValid((self.Cotrols[i] as TEdit).Text) then begin self.Controls[i].Color := clRed; // Farbe ändern buffer := self.Controls[i]; // letztes Edit das falschen Eintrag enthält merken end; // if not self.isValid((Component[i] as TEdit).Text) end; // if self.Component[i] is TEdit end; // for i := 0 to self.ComponentCount - 1 // wenn mindestens ein Edit ungültige Eingabe enthielt if assigned(buffer) then begin buffer.setFocus; // Focus setzen end; // if assigned(buffer) end; Da TEdit ein Control ist, solltest du über die Controls des Form iterieren. TControl bietet schon die Eigenschaft Color und die Methode setFocus. Deshalb muss an den stellen auch nicht gecastet werden. Ansonsten würde ich (wie hier) eine eigene Methode zur Validierung der Eingabe nehmen. Kann ja sein, dass du irgendwann eine andere Eingabe als gültig ansiehst. Ja, hoffe das hilft dir weiter, Gruß Der Unwissende |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz