![]() |
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:
... und später knallts, weil im onchange Ereignis noch ein paar wichtige Dinge passieren, die hier nicht ausgeführt werden
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;
Delphi-Quellcode:
.. und das funktioniert nicht!
fDataShow.cobsgChange(TComboBox(fDataShow.foView.FindComponent('fld_'+inttostr(i))));
|
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; |
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. |
Re: Kein OnChange von TComboBox bei zuweisung von Itemindex
Zitat:
... er wählt zwar einen Eintrag aus aber dann knallts beim drücken der Combobox das onchange ereignis der combobox
Delphi-Quellcode:
...hier der code der ausgeführt wird....
...
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 ...
Delphi-Quellcode:
[Edit] zweite procedure neu eingefügt! [/Edit]
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; |
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; |
Re: Kein OnChange von TComboBox bei zuweisung von Itemindex
Delphi-Quellcode:
damit durchläuft er jetzt zwar alles ohne probleme, nur wenn ich jetzt auf die combobox klicke, dann gibt es wieder eine zugriffsverletzung!
begin
ItemIndex:=k; OnChange(TComboBox(fDataShow.foView.FindComponent('fld_'+inttostr(i)))); break; end ich werd wahnsinnig :wall: und das kommt nur durch diese combobox! wenn ich den code ausschalte, klappt alles wunderbar! |
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 18:50 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