AGB  ·  Datenschutz  ·  Impressum  







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

Timingproblem mit OnChange und OnExit

Ein Thema von RWarnecke · begonnen am 10. Jan 2010 · letzter Beitrag vom 11. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Timingproblem mit OnChange und OnExit

  Alt 10. Jan 2010, 12:49
Hallo zusammen,

ich habe auf einem Formular einen TreeView. Dieser TreeView hat ein OnChange-Ereignis. Neben dem TreeView sind verschiedene Eingabefelder, die Werte in einer Klasse speichern. Bei jeden Eingabefeld habe ich das Ereignis OnExit genutzt um die Werte in die Klasse zu schreiben. Wenn ich jetzt einen Wert eingebe und dann sofort auf den TreeView klicke, wird als erstes das OnChange Ereignis des TreeView ausgelöst und dann das Ereignis OnExit der Eingabefelder. Kann ich das irgendwie umdrehen ?

Nachtrag : Dieses Problem tritt nur zwischen TTreeView und TEdit oder TComboBox auf. Auf das OnChange-Ereignis bei den Eingabefelder würde ich gerne verzichten, da ich erst den Wert abspeichern möchte, wenn er vollständig ist, wenn das möglich ist.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 11. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#2

Re: Timingproblem mit OnChange und OnExit

  Alt 10. Jan 2010, 16:00
Vielleicht als Notlösung...

Delphi-Quellcode:
var
  bFlag: boolean = false;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if bFlag then
  begin
    bFlag := false;
    Exit;
  end;

  ShowMessage('Edit1Exit');
  // ...
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  Edit1.OnExit(Sender);
  ShowMessage('TreeView1Change');
  // ...
end;
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: Timingproblem mit OnChange und OnExit

  Alt 10. Jan 2010, 16:05
Danke für Deine Notlösung, nur leider habe ich 20 Felder bestehend aus ComboBoxen und Editfeldern.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Timingproblem mit OnChange und OnExit

  Alt 10. Jan 2010, 17:00
Hallo Rolf

Zitat von RWarnecke:
[...] Dieser TreeView hat ein OnChange-Ereignis. [...] Wenn ich jetzt einen Wert eingebe und dann sofort auf den TreeView klicke, wird als erstes das OnChange Ereignis des TreeView ausgelöst und dann das Ereignis OnExit der Eingabefelder. [...]
Ich weiß nicht, was du im OnChange-Ereignis genau machst, aber vielleicht wäre diese Lösung denkbar:

Du schreibst dir eine Prozedur, die das macht, was normalerweise im OnChange-Ereignis ausgeführt wird. Im OnExit-Ereignis der Editfelder kannst du diese Prozedur dann aufrufen:

Delphi-Quellcode:
procedure DoOnChange;
begin
  // Code aus dem OnChance-Ereignis
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  // Code des OnExit-Ereignisses
  // ...
  DoOnChange;
end;
Wenn das OnChange-Ereignis aufgrund anderer Aktionen aufgerufen wird (z.B. beim Löschen von Einträgen), dann kannst du die entsprechende Prozedur auch dort (Löschen-Prozedur) aufrufen.
Damit lässt sich die Reihenfolge der Prozeduren/Ereignisse indirekt beeinflussen und bist gleichzeitig relativ flexibel.

Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Timingproblem mit OnChange und OnExit

  Alt 10. Jan 2010, 17:19
Delphi-Quellcode:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  if ActiveControl <> Sender then
    ActiveControl := TWinControl(Sender);

  ...
end;


Delphi-Quellcode:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  //if ActiveControl <> Sender then
  //begin
  // Memo1.Lines.Add('check TreeView1.OnChange');
  // ActiveControl := TWinControl(Sender);
  //end;

  Memo1.Lines.Add('TreeView1.OnChange');
end;

procedure TForm1.TreeView1Enter(Sender: TObject);
begin
  Memo1.Lines.Add('TreeView1.OnEnter');
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Memo1.Lines.Add('Edit1.OnExit');
end;
ohne
Code:
TreeView1.OnChange
Edit1.OnExit
TreeView1.OnEnter
mit
Code:
check TreeView1.OnChange
Edit1.OnExit
TreeView1.OnEnter
TreeView1.OnChange
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

Re: Timingproblem mit OnChange und OnExit

  Alt 10. Jan 2010, 18:07
Danke euch beiden. Mit himitsu's Beispiel bin ich schonmal eine Ecke weitergekommen. Nur leider arbeite ich in dem OnExit-Ereignis mit TreeView1.Selected.Data. Nur leider wird hier jetzt die neue TreeNode genommen statt der alten TreeNode. Kann ich das auch noch irgendwie schaffen, dass er die alte Node behält und erst beim zweiten Mal die neue Node nimmt ?

Nachtrag : Im TreeView habe ich das Ereignis OnClick und OnChange. Im OnClick wird noch eine zweite Liste gefüllt. Im OnChange werden die Eingabefelder gefüllt und ebenfall die zweite Liste, durch direktes Aufrufen des OnClick-Ereignisses.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 11. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#7

Re: Timingproblem mit OnChange und OnExit

  Alt 10. Jan 2010, 21:53
Zitat von RWarnecke:
Danke für Deine Notlösung, nur leider habe ich 20 Felder bestehend aus ComboBoxen und Editfeldern.
Notnotlösung?

Delphi-Quellcode:
var
  aComp: TComponent;
  bFlag: boolean = false;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if bFlag then
  begin
    bFlag := false;
    Exit;
  end;
  aComp := Edit1;
  // ...
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  aComp.OnExit(Sender); // noch entsprechend casten...
  // ...
end;
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

Re: Timingproblem mit OnChange und OnExit

  Alt 11. Jan 2010, 18:38
Danke Björn für Deinen Vorschlag. Aber ich bin kein großer Freund von globalen Variablen. Der Weg den himitsu gezeigt hat, funktioniert schon sehr gut. Es gibt nur einen kleinen Haken, wenn der Wert geändert wurde, wird er in den neu ausgewählten Datensatz geschrieben und nicht in den vorherigen Datensatz.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: Timingproblem mit OnChange und OnExit

  Alt 11. Jan 2010, 18:41
Hab grad kein Delphi hier, aber gibt es nicht ein Ereignis vor OnChange?
(OnCanCahnge oder so ... also 'ne Abfrage ob gewechselt werden darf)
Versuch mal meinen Code dahin zu verlagern.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Timingproblem mit OnChange und OnExit

  Alt 11. Jan 2010, 18:47
Zitat von himitsu:
Hab grad kein Delphi hier, aber gibt es nicht ein Ereignis vor OnChange?
(OnCanCahnge oder so ... also 'ne Abfrage ob gewechselt werden darf)
Versuch mal meinen Code dahin zu verlagern.
Gibt es: Delphi-Referenz durchsuchenOnChanging
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:28 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