AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Ansteuerung von einem statt zwei Editfelder

Ansteuerung von einem statt zwei Editfelder

Ein Thema von Fallenzer · begonnen am 14. Aug 2019 · letzter Beitrag vom 15. Aug 2019
Antwort Antwort
Seite 1 von 2  1 2   
Fallenzer

Registriert seit: 3. Aug 2019
Ort: Wernigerode, Sachsen-Anhalt, DE
7 Beiträge
 
Delphi 10.3 Rio
 
#1

Ansteuerung von einem statt zwei Editfelder

  Alt 14. Aug 2019, 14:45
Hallo und guten Tag,

Ich habe nun folgendes Problem:

Ich versuche, durch einen Nummernblock, der aus den Ziffern 0-9 besteht, zwei Editfelder EINZELN anzusteuern...

Dafür habe ich folgenden Code verwendet

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
if Edit1.Showing then
begin
Strin:= Edit1.text;
Strin:=concat(Strin,'1');
Edit1.Text:= Strin;
end;
if Edit2.Showing then
begin
Strin2:= Edit2.text;
Strin2:=concat(Strin2,'1');
Edit2.Text:= Strin2;
end;
end;
Hierbei werden aber BEIDE Editfelder angesteuert, nicht nur das ausgewählte...

Ich bitte um schnellstmögliche Hilfe.
Vielen Dank
Danilo Bleul (existiert seit 2005)
  Mit Zitat antworten Zitat
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
155 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 14. Aug 2019, 14:56
Dann wird showing bei beiden true sein. Du musst dir also überlegen, was wirklich unterschiedlich und damit abfragbar ist.

Geändert von philipp.hofmann (14. Aug 2019 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName
Online

Registriert seit: 19. Okt 2003
Ort: Santa Marta / Colombia
394 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 14. Aug 2019, 14:57
Es gibt eine property Focused. die jedes Control hat. Ist diese True, ist es das aktive Control.

Und der Sender bringt dir nichts, wenn es der Button ist, btw.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.470 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 14. Aug 2019, 15:00
Showing gibt an, ob das Control sichtbar ist.

if Edit1.Focused then
Markus Kinzler
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.250 Beiträge
 
#5

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 14. Aug 2019, 15:43
Hat zwar nix mit der Frage zu tun aber ist es wirklich so schwer  Strin := Strin + '1'; zu schreiben statt concat zu verwenden?
Außerdem solltest du dich mal über den Delphi-Style-Guide informieren.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
815 Beiträge
 
Delphi 6 Professional
 
#6

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 14. Aug 2019, 16:44
Hmm..

Es gibt eine property Focused. die jedes Control hat. Ist diese True, ist es das aktive Control.
Das dürfte auch nichts bringen, da im Button.click bereits der Focus auf den Button selber gewandert ist und keines der Edits mehr den focus hat...

Also, wenn ich sein Showing richtig deute, dann hat er einmal das eine und einmal das andere Edit sichtbar.
Dann sollte er mit edit.visible arbeiten statt mit Showing..

Oder er muss von TButton weg auf z.B. TSpeedButton, welche keinen Focus beim CLick erhalten, dann kann er mit Focused arbeiten, da dann die Edits den Focus behalten.
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)

Geändert von HolgerX (14. Aug 2019 um 16:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
319 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 15. Aug 2019, 08:13
Mal nebenbei, der Code (vom TE) ist viel zu lang. Folgendes sollte das gleiche bewirken (wie der vom TE) ohne einen Helpstring:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if Edit1.Showing then
  begin
    Edit1.Text := Edit1.text + '1';
  end else if Edit2.Showing then
  begin
    Edit2.text := Edit2.text + '1';
  end;
end;
@TE: was philipp.hofmann geschrieben hat ist denke ich ein guter Ansatz. Mach dir Gedanken was eine wirklich einmalige Bedingung ist. Mal ein paar Beispiele:
- Kann im Edit.text als letztes Zeichen eine "1" stehen, bevor du sie hinzufügst? Wenn nicht, könntest du das abfragen.
- Werden die Edit wirklich ausgeblendet, das .showing oder .visible hier sinnvolle Abfragen wären?
- Ist der eingegebene Text ggf. vor dem Hinzufügen der "1" immer gleich lang? Könnte man dies im OnChange abfragen und auf den Button verzichten.
usw.

BTT:
Es gibt noch mehr Möglichkeiten:

Man setzt beim Ändern des jeweiligen Edit eine globale Variable, welche anzeigt welches Edit als letztes bearbeitet wurde (im OnChange) und somit die Steuerung übernimmt. Ist zwar keine schöne Methode aber würde funktionieren.

Delphi-Quellcode:
var
  sLastEdit : string;

procedure EditChange(Sender: TObject);
begin
  sLastEdit := TEdit(Sender).Name;
end;

procedure TTools.KopierenClick(Sender: TObject);
begin
  if sLastEdit = 'Edit1then
  begin
  
  end else if sLastEdit = 'Edit2then
  begin
  
  end;
end;
Oder noch einfacher du setzt den Button auf Default (idealerweise im OnEnter der Editfelder, falls du andere Buttons zwischendurch als Default brauchst, daher beim OnExit diesen wieder zurücksetzen), dann bleibt der Focus auch auf dem Edit:

Wichtig: Die Eingabe muss dann mit der "Enter"-Taste bestätigt werden damit dies so funktioniert!

Delphi-Quellcode:
procedure TForm1.EditEnter(Sender: TObject);
begin
  //Falls der Default ein anderer Button hat hier austragen
  Button2.Default := True;
end;

procedure TForm1.EditExit(Sender: TObject);
begin
  Button2.Default := False;
  //Falls der Default ein anderer Button haben soll hier eintragen
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Edit1.Focused then
  begin
    Edit1.Text := Edit1.text + '1';
  end else if Edit2.Focused then
  begin
    Edit2.text := Edit2.text + '1';
  end;
end;

//Als Alternative (hier wäre es jedoch egal welches Edit aktiv ist):
procedure TForm1.Button2Click(Sender: TObject);
var
  cEdit : TEdit;
begin
  cEdit := TEdit(Tools.FindComponent(activeControl.Name));
  Edit.text := Edit.Text + '1';
end;
(Wenn das die einzige Stelle ist an der ein Button auf "Enter" bei einem Edit reagieren soll bzw. es keine anderen Stellen gibt wo der Default gebraucht wird, kannst du das auch im Objektinspector direkt einstellen. Hier muss man sich aber wirklich sicher sein, da es sonst zu Nebeneffekten kommen kann!)

...viele Wege führen nach Rom. Sie sind nur anders (besser/schlechter).
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (15. Aug 2019 um 09:47 Uhr)
  Mit Zitat antworten Zitat
exilant

Registriert seit: 28. Jul 2006
133 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 15. Aug 2019, 09:34
Hat zwar nix mit der Frage zu tun aber ist es wirklich so schwer  Strin := Strin + '1'; zu schreiben statt concat zu verwenden?
Außerdem solltest du dich mal über den Delphi-Style-Guide informieren.
Ist genau die Art von hilfreicher Antwort die ein Einsteiger gerne liest.
Es gibt 10 Sorten von Menschen: Die einen können Binärzahlen lesen, die anderen nicht.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.473 Beiträge
 
Delphi 7 Personal
 
#9

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 15. Aug 2019, 10:28
Ich frag mich was der TE eigentlich will, da der "Ziffernblock" nirgendwo auftaucht.
Ich vermute da so etwas wie
Delphi-Quellcode:
case ziffer of
 0: edit0.Text:='0';
 1: edit1.Text:='1';
...
end;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
319 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Ansteuerung von einem statt zwei Editfelder

  Alt 15. Aug 2019, 10:42
Das denke ich weniger, da er in beiden Fällen die '1' anhängt, müsste ja sonst beim zweiten Edit die '2' sein. Auch das er mit zwei Edit arbeitet denke ich spricht gegen diesen Fall.

Aber ich vermute das der Weg über den Button ggf. nicht der Richtige ist, sondern hier OnChange mit entsprechender/n Bedingung/en der bessere Weg wäre.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (15. Aug 2019 um 10:47 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf