Einzelnen Beitrag anzeigen

Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#4

Re: Kein OnChange von TComboBox bei zuweisung von Itemindex

  Alt 5. Jan 2005, 11:08
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]
  Mit Zitat antworten Zitat