Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Kein OnChange von TComboBox bei zuweisung von Itemindex (https://www.delphipraxis.net/37381-kein-onchange-von-tcombobox-bei-zuweisung-von-itemindex.html)

ibp 5. Jan 2005 10:15


Kein OnChange von TComboBox bei zuweisung von Itemindex
 
Hallo,

wenn ich bei einer TComboBox einen ItemIndex zuweise, wird kein OnChange Ereignis ausgelöst!
Wie kann ich per Code eine Auswahl treffen, wobei genau das gleiche abläuft, wie wenn ich es per Maus mache?

Delphi-Quellcode:
unit 1
...
// suche combobox und finde wert in combopbox
cbs:=TStrings.Create;
with TComboBox(fDataShow.foView.FindComponent('fld_'+inttostr(i))) do
begin
  cbs:=Items;
  for k:=0 to cbs.Count-1 do
  begin
    if pos(inzidenz[j].csvVal,cbs.Strings[k])>0 then // auswahl gefunden
    begin
      ItemIndex:=k;
      break;
    end;
  end;
end;
cbs.Free;
... und später knallts, weil im onchange Ereignis noch ein paar wichtige Dinge passieren, die hier nicht ausgeführt werden

Delphi-Quellcode:
fDataShow.cobsgChange(TComboBox(fDataShow.foView.FindComponent('fld_'+inttostr(i))));
.. und das funktioniert nicht!

s14 5. Jan 2005 10:22

Re: Kein OnChange von TComboBox bei zuweisung von Itemindex
 
Hallo,
funktioniert das auch nicht?
Die Combobox hast du ja schon:

Delphi-Quellcode:
ItemIndex:=k;
OnChange(Self);
break;

Bernhard Geyer 5. Jan 2005 10:23

Re: Kein OnChange von TComboBox bei zuweisung von Itemindex
 
Das das Event nicht ausgelößt wird ist so gewollt. Solche Events werden nur bei User-Interaktion ausgelößt.
Das in deinem Fall beim direkten Aufruf des Eventhandlers es nicht klappt kann eigentlich nur an dem Code deines Eventhandlers liegen, da ich dieses Verfahren schon hunderte mal verwendet habe.

ibp 5. Jan 2005 11:08

Re: Kein OnChange von TComboBox bei zuweisung von Itemindex
 
Zitat:

Zitat von s14
Delphi-Quellcode:
ItemIndex:=k;
OnChange(Self);
break;

... gibt wieder eine zugriffsverletzung! auf "adresse blabla etc"

... er wählt zwar einen Eintrag aus aber dann knallts beim drücken der Combobox

das onchange ereignis der combobox
Delphi-Quellcode:
...
procedure TfoDBEdit.FormFldChange(Sender: TObject);
var
  FeldNr:integer;
  SatzNr:integer;
begin
  SatzNr:= AktZeile- 1;
  FldValChanged:=true;

  if Sender is TComboBox then
  begin
    cobsgChange(Sender);
    exit;
  end; // if TComboBox
...
...hier der code der ausgeführt wird....

Delphi-Quellcode:
procedure TfoDBEdit.cobsgChange(Sender: TObject);
var
  sidx:integer;
  i:integer;

  FeldNr:integer;
  SatzNr:integer;

begin
  if not (Sender is TComboBox) then
    exit;

  SatzNr:= AktZeile-1;
  if FormStateAkt=viewList then
    FeldNr:= AktSpalte
  else
    FeldNr:= TComboBox(Sender).Tag;

  with sgView do
  begin
    sidx:=TComboBox(Sender).ItemIndex; // ausgewählter Index
    Cells[FeldNr, SatzNr+1]:=TComboBox(Sender).Items.Strings[sidx]; // in Grid übernehmen
    CellContent[SatzNr,FeldNr].luKey:=TStr(TComboBox(Sender).Items.Objects[sidx]).value; // zugehöriger Wert übernehmen

    // suche Combobox die aktuelles Feld als Referenz hat...
    for i:=0 to high(CellContent[SatzNr]) do
    begin
      if i<>FeldNr then
      begin
        if CellContent[SatzNr, FeldNr].Nme=CellContent[SatzNr,i].reFld then
        begin
          CellContent[SatzNr,i].reKey:=CellContent[SatzNr,FeldNr].luKey; // RefKey der CoBx ist aktueller LookUpKey
          CellContent[SatzNr,i].luKey:=inkaNil; // LuKey der CoBx ist Nil!!
          Cells[i,SatzNr+1]:='<undefiniert>'; // Feld ändern im StringGrid
          if FormStateAkt=viewRec then // Formular aktualisieren incl. Combobox
            DataInForm;
        end; // if
      end; // if
    end; // for
    FldValChanged:=true;

  end; // with
end;
[Edit] zweite procedure neu eingefügt! [/Edit]

Christian Seehase 5. Jan 2005 11:50

Re: Kein OnChange von TComboBox bei zuweisung von Itemindex
 
Moin ibp,

dann müsste der Code-Schnipsel von s14 so aussehen:

Delphi-Quellcode:
ItemIndex:=k;
FormFldChange(<Name der ComboBox>);
break;

ibp 5. Jan 2005 11:55

Re: Kein OnChange von TComboBox bei zuweisung von Itemindex
 
Delphi-Quellcode:
begin
  ItemIndex:=k;
  OnChange(TComboBox(fDataShow.foView.FindComponent('fld_'+inttostr(i))));
  break;
end
damit durchläuft er jetzt zwar alles ohne probleme, nur wenn ich jetzt auf die combobox klicke, dann gibt es wieder eine zugriffsverletzung!

ich werd wahnsinnig :wall:

und das kommt nur durch diese combobox! wenn ich den code ausschalte, klappt alles wunderbar!

ibp 5. Jan 2005 12:27

Re: Kein OnChange von TComboBox bei zuweisung von Itemindex
 
zum Verständnis...

Es gibt eine Komponentenseite in der db-felder angezeigt werden!

wenn ich nun wie oben beschrieben eine comboboxauswahl per code ändere, dann gibt es danach immer eine zugriffsverletzung wenn ich auf diese komponente im formular per maus zugreife. andere comboboxen, die das gleiche onchangeereignis auf der gleichen seite benutzen, lassen sich anklicken ohne probleme!

hat jemand noch eine idee?


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