Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   der Event Onchange von ComboBox aufgerufen (https://www.delphipraxis.net/159694-der-event-onchange-von-combobox-aufgerufen.html)

thomas2009 8. Apr 2011 11:59

der Event Onchange von ComboBox aufgerufen
 
Hi
was muss ich tun, damit der Event Onchange von ComboBox aufgerufen wird ?

wenn ich den Index von der ComboBox ändere, dann passiert nichts !
Ich ändere den Index nicht direkt über Comobox sondern über den Button-Klick
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.ItemIndex:=2;
end;
Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Caption :='ComboBox1 Index wurde geändert';;
end;

Bernhard Geyer 8. Apr 2011 12:06

AW: der Event Onchange von ComboBox aufgerufen
 
Wie wäre es damit:

Delphi-Quellcode:
ComboBox1Change(ComboBox1);

Deep-Sea 8. Apr 2011 12:11

AW: der Event Onchange von ComboBox aufgerufen
 
Oder vlt. ist - allgemein - diese Form besser geeignet:
Delphi-Quellcode:
procedure TForm1.AktualisiereEtwas;
begin
  Caption := 'ComboBox1 Index wurde geändert';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ComboBox1.ItemIndex := 2;
  AktualisiereEtwas;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  AktualisiereEtwas;
end;

mkinzler 8. Apr 2011 12:18

AW: der Event Onchange von ComboBox aufgerufen
 
Vielleicht solltest du dich endlich einmal mit den Grundlagen beschaftigen, sonst wird das nie etwas!

Jumpy 8. Apr 2011 12:20

AW: der Event Onchange von ComboBox aufgerufen
 
OT und mal wieder nur aus Neugier gefragt:

Das Change Ereignis wird nicht ausgelöst, wenn die Änderung im Code erfolgt?
Frage deshalb, weil ich parallel zu Delphi für die Firma, C# für die Schule lerne und da hab ich erst vorgestern in einem Buch zu der entsprechenden ComboBox Komponente gelesen, dass das entsprechende Event (war es IndexChanged?) sowohl durch den User als auch durch anderen Code ausgelöst wird.

stahli 8. Apr 2011 12:28

AW: der Event Onchange von ComboBox aufgerufen
 
@Jumpi
Die VCL verhält sich an vielen Stellen nicht ganz erwartungsgemäß.
Man kann zwar dann immer irgendwelche Workaraounds implementieren, aber eine Generalüberholung der VCL täte m.E. schon Not (selbst wenn alte Projekte dann nicht mehr fortgeführt werden könnten).

DeddyH 8. Apr 2011 12:30

AW: der Event Onchange von ComboBox aufgerufen
 
Delphi-Referenz durchsuchenTComboBox.OnChange
Zitat:

Note: OnChange only occurs in response to user actions. Changing the Text property programmatically does not trigger an OnChange event.

Bernhard Geyer 8. Apr 2011 12:42

AW: der Event Onchange von ComboBox aufgerufen
 
Zitat:

Zitat von stahli (Beitrag 1093902)
@Jumpi
Die VCL verhält sich an vielen Stellen nicht ganz erwartungsgemäß.

Erwartungsgemäßes verhalten ist aus der Sicht des Users. Ich finde es besser/schöner/logischer das man über Programmtechnische Änderungen nicht zusätzlich Informiert wird.

In dem Fall das bei programmtechnische Änderungen man immer Events bekommt ist Aufwändiger zu behandeln da man dann oft noch eine Flag braucht um im Event zu unterscheiden ob man gerade Programmtechnisch etwas macht oder die Änderung wirklich vom User kommt.

Und ein "Generalüberholung" der VCL um das Verhalten zu ändern ist mit sehr viel Testaufwand/Anpassungen verbunden und würde m.E. noch viel größere Aufschreie verursachen als mit der Unicode-Umstellung.

uligerhardt 8. Apr 2011 12:53

AW: der Event Onchange von ComboBox aufgerufen
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1093909)
In dem Fall das bei programmtechnische Änderungen man immer Events bekommt ist Aufwändiger zu behandeln da man dann oft noch eine Flag braucht um im Event zu unterscheiden ob man gerade Programmtechnisch etwas macht oder die Änderung wirklich vom User kommt.

Genau.

Was auch nervt, ist die Inkonsistenz: Das OnChange bei ComboBoxen wird bei programmatischen Änderungen nicht aufgerufen. Bei CheckBoxen gibt's kein OnChange, also muss man OnClick nehmen - und das wird bei programmatischen Änderungen aufgerufen.

thomas2009 8. Apr 2011 23:54

AW: der Event Onchange von ComboBox aufgerufen
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1093895)
Wie wäre es damit:

Delphi-Quellcode:
ComboBox1Change(ComboBox1);

Es hat geklappt :thumb:

Zitat:

Zitat von Deep-Sea (Beitrag 1093897)
Oder vlt. ist - allgemein - diese Form besser geeignet:
Delphi-Quellcode:
...
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  AktualisiereEtwas;
end;

Das funktioniert auch. ich möchte Aber den Event Onchange komplett aufrufen
Mit deinem Vorschlag muss ich in die Funktion AktualisiereEtwas alles
hinschreiben, was in Combobox1Change steht. Sonst ist OK

himitsu 9. Apr 2011 06:48

AW: der Event Onchange von ComboBox aufgerufen
 
Zitat:

Zitat von thomas2009 (Beitrag 1094034)
Mit deinem Vorschlag muss ich in die Funktion AktualisiereEtwas alles
hinschreiben, was in Combobox1Change steht.

Dann hast du im Beispiel von Deep-Sea etwas übersehn oder nicht verstanden.

Delphi-Quellcode:
// die verknüpfte Methode aufrufen
// die Methoden können aber sonstwie heißen
ComboBox1Change(ComboBox1);
Button1Click(Button1);

// das Ereignis aufrufen (ist nix verknüpft, dann knallts)
ComboBox1.OnChange(ComboBox1);
Button1.OnClick(Button1);

// manche Komponenten haben sogar extra Methoden um das ereignis auszulösen
// und ist hier kein Ereignis verknüpft, dann knallt's nicht
Button1.Click;

// Das übergeben der Objekte (ComboBox1 und Button1) ist für Codes, welche den Sender prüfen.
// Wird nix geprüft, dann kann man auch nil nehmen.
// Wobei man nil auch nehmen kann, um den Sender geziehlt zu prüfen und so zu unterscheiden, ob in der GUI oder im Code das ereignis aufgerufen wurde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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