掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
コンポーネントのイベント実装 (ID:44908)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんにちは 奇妙な(あほうな)ことをおききすることになるかもしれませんが どうしても理解できないことがあります。ご教授願いませんでしょうか? 現在カスタムコンポーネントを作っておりますがそれに対するイベントの 実装についてどうしても理解できないことがあります。誤りがあれば つっこんでいただけませんでしょうか? 基本的な理解がおかしいのでしょうか? あるコンポーネントにおいてメソッドが実行されたとき通常いくつかの プロパティが変化する。それらひとつひとつがイベントである。それぞれの イベントを発生させるメソッドは決まっていてあるイベントの動作を変更 させたいならそれを引き起こすメソッドをオーバーライドし、処理を変更 する。 イベントの考え方はこれでよろしいでしょうか?ならば たとえばあるコンポーネントでOnKeyPressを定義(変更)したいなら KeyPressをオーバーライドする(細かい処理は省略) procedure KeyPress(Sender: TObject; var key char); pverride; ... published property OnKeyPress; ... procedure XXX.KeyPress(Sender: TObject; var key char); begin inherited KeyPress(key); showmessage(key); end; これでたとえばTEditのようなコントロールでキー入力をするたびに入力 された文字がメッセージボックスに出るはずですがこれはよいのです (理解できる)が、TTreeViewでOnEditedイベントの処理を変更したくて Editイベントをオーバーライドするような場合にはどうでしょう? OnEditedの引数は(Sender: TObject; Node: TTreeNode; var S:string) ですがEditの引数は (const Item: TTVItem)です。引数が違いますよね。 これだと前出したOnKeyPressの例のような標準イベントが持つ引数を使う 処理ができないと思うのですがどうでしょう?こんな風にです procedure Edit(const Item: TTVItem); override; ... published property OnEdited; ... procedure XXX.Edit(const Item: TTVItem); begin inherited Edit(Item); showmessage(S) <---こういったことしたくてもできませんよね。 end; 私の考えでいくと、あるイベントとそれを引き起こすメソッドは1対1 (または多対1)で対応しており、それぞれの引数は一致していないと おかしい(使えない)のではないかと思うのです。特にOnEditedとEdit のように共通部分がまったくないのはどういうことか?と考えているの ですが...おかしいでしょうか? わっとっと
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.