| 魔界の仮面弁士 さん、ありがとうございます
>>投稿してから、いらない部分を消し、コードを整理したところ、イベントが取れるようになりました。 > うまくいかなかった理由は、その「いらない部分」にあったという事でしょうかね。 > (できれば、何故うまくいかなかったのか、その理由を知りたいところですが…)
どうも、デバッグ用に固定値を入れていたタイミングが悪かったのが事の始まりだったようです。 また、デバッグ用に固定値を使うために元々使っていた変数を一時的にコメントにしたため、 その変更を行った時に余計なことをしていたようです。 一度コメントを元に戻し、値を引数から渡すようにしたところ、うまくいきました。
>>ラベルのクリックイベント > イベントを受け取る LB_Click メソッドは、継承元と継承先、どちらに用意してありますか?
LB_Click関数は、継承元、継承先、どちらにもあります。 継承元はprotected virtual、継承先はprotected overrideで宣言を付加しています。
> また、それを Label の Click イベントへと割り当てる作業は、継承元と継承先の > どちらから行っていますか?
これは、継承元で行っています。 上記でLbの宣言を行っていた部分は、1つの関数Arrangeとして継承元でまとめ、それを継承元のControl_Loadから呼び出す形に変更しました。 #この変更は、動くことを確認済です。 Arrange関数は継承先では必要ないので、継承先には作成していません。 継承先のContorol_LoadからArrangeを呼び出し、ラベルが表示されるところまでは確認しています。 ただ、イベントは・・・取れません。
>>ラベルのクリックイベントについて、改めて設定してあげないといけないのかと > デザイナで設定できるようにするなら、その継承フォームに「ラベルをクリックしたときのイベント」として、 > 例えば「public event EventHandler LabelClick;」および、それに対応する > プロテクトメソッド(例: OnLabelClick) は用意しておくと良いかも知れません。
継承元では、 public event EventHandler LbClicked; protected virtual void OnLbClicked(object sender, EventArgs e) { if (LbClicked != null) { LbClicked(this, e); } } 継承先では、 public new event EventHandler LbClicked; protected override void OnLbClicked(object sender, EventArgs e) { if (LbClicked != null) { LbClicked(this, e); } } の宣言はしています。 試しに、両方をコメントにしてみたりしたのですが、イベントは飛んできませんんでした。
>>#Designer.csって、簡単に触って良いものなのか不安ですが・・・ > 開発環境が、.designer.cs を修正する事があるため、一部の設定は失われる事があります。 > そうした点を理解した上で触る分には問題無いかと思います。(私は触りませんが)
とりあえず、動作に変わりがないので、元に戻しました。 パネルコントロールの宣言はinternalです。 |