AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Return to Sender

Ein Thema von Murdock · begonnen am 15. Nov 2005 · letzter Beitrag vom 15. Nov 2005
Antwort Antwort
Murdock

Registriert seit: 4. Okt 2005
Ort: Osnabrück
9 Beiträge
 
#1

Return to Sender

  Alt 15. Nov 2005, 08:57
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
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Return to Sender

  Alt 15. Nov 2005, 09:01
Hai Murdock,

meinst Du das so:
Delphi-Quellcode:
begin
  if blubb = blubb then
  begin
    Edit1.SetFocus;
  end;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#3

Re: Return to Sender

  Alt 15. Nov 2005, 09:05
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;
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Murdock

Registriert seit: 4. Okt 2005
Ort: Osnabrück
9 Beiträge
 
#4

Re: Return to Sender

  Alt 15. Nov 2005, 09:12
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)

Murdock
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#5

Re: Return to Sender

  Alt 15. Nov 2005, 09:17
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
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Return to Sender

  Alt 15. Nov 2005, 10:30
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:
     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;
Hoffe das hilft. Ausprobiert hab ich es allerdings jetzt nicht.

Gruß

Uwe
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Murdock

Registriert seit: 4. Okt 2005
Ort: Osnabrück
9 Beiträge
 
#7

Re: Return to Sender

  Alt 15. Nov 2005, 13:50
Danke für die Vorschläge.

Ich werde jetzt mal schauen welcher für mich (Anfänger) am besten einzubauen ist.

Vielen Dank
Murdock
  Mit Zitat antworten Zitat
Alt 15. Nov 2005, 14:07     Erstellt von 3_of_8
Dieser Beitrag wurde von Sharky gelöscht. - Grund: Muss das OffTopic-Posten denn sein?
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: Return to Sender

  Alt 15. Nov 2005, 15:17
Zitat von Murdock:
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.
Da musst du den Ansatz von crisw eigentlich nur ein wenig erweitern :

Delphi-Quellcode:
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;
Ein paar kleine Anmerkungen:
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz