StringGridにComboBoxを動的生成した時イベントが通らない

解決


Kty  2013-02-22 04:20:06  No: 43923

お世話になります。
過去ログを見たのですが、原因が分からないので教えてほしいです。

一部抜き出しですが…
------------------------------------
------------------------------------
type
  TForm1 = class(TForm)
  …
  procedure ComboBox1Select(Sender: TObject);
  function UFCreate_ComboBox(StrGrid: TStringGrid): Boolean;

var
  parCBox : array of TComboBox;

procedure TForm1.ComboBox1Select(Sender: TObject);
var
  iCnt    : Integer;
  iCmpNo  : Integer;
  CBox    : TComboBox;
begin
  try
    CBox := (Sender as TComboBox);

    if CBox.Text = 'A' then begin
      ...処理
    end;

...

function TForm1.UFCreate_ComboBox(StrGrid: TStringGrid): Boolean;
begin
  try
    Inc(piCnt_CBox);
    Inc(piRow_Cnt); // RowCount

    SetLength(parCBox, piCnt_CBox + 1);

    parCBox[piCnt_CBox] := TComboBox.Create(Self);

    // イベントハンドラの割り当て
    parCBox[piCnt_CBox].OnSelect := ComboBox1Select;   // 選択処理
    parCBox[piCnt_CBox].OnChange := ComboBox1Change;   // 文字列が変更された時の処理

    // コントロールの親を設定
    parCBox[piCnt_CBox].Parent := StringGrid1;

------------------------------------
------------------------------------

上記のように、StringGridの上にComboBoxを動的生成しています。
ComboBoxを生成する処理の中にイベントを割り当てる処理を書いていますが、
ComboBoxのOnSelectイベントに飛びません。

同じ様な処理でフォームの上に動的生成したComboBoxは
イベントに飛びます。

StringGridの上というのがなにか問題なのでしょうか?

お知恵をいただきたいです。
よろしくお願いします。


Kty  2013-02-22 04:22:26  No: 43924

ちなみに、
parCBox[piCnt_CBox].OnChange := ComboBox1Change;   // 文字列が変更された時の処理

は無視してください。


KHE00221  2013-02-22 18:58:02  No: 43925

よくわからんが

ListBox ComboBox は Parent を StringGrid や DrawGrid にすると
CNCommand が飛んでこないみたい


KHE00221  2013-02-22 19:07:31  No: 43926

Edit Memo も OnChange 飛んでこないし

CheckBox なんて チェックが付けられない・・・・


KHE00221  2013-02-22 20:14:08  No: 43927

原因は・・・・

procedure TCustomGrid.WMCommand(var Message: TWMCommand);
begin
  with Message do
  begin
    if (FInplaceEdit <> nil) and (Ctl = FInplaceEdit.Handle) then
      case NotifyCode of
        EN_CHANGE: UpdateText;
      end;
  end;
end;

に inherited; が無い・・・・

BDS2006 XE2 ともに・・・


Kty  2013-02-23 00:27:07  No: 43928

XE3を使ってるのですが、vcl.Grids.pasの
procedure TCustomGrid.WMCommand(var Message: TWMCommand);
に inherited;を入れたらイベントが通りました。

思い通りの動作ができました。助かりました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加