662 :
デフォルトの名無しさん:
ウィンドウをフローティングさせる機能を実現するためにはどのようにすればいいのでしょうか?
(OpenJaneのアンカー’>>’ポップアップ機能みたいな)
Formを作ってポップアップウィンドウを表示させると、ポップアップウィンドウのほうに
フォーカスが移ってしまうのですが
どなたか実現方法をご存知の方いませんか?
例 メインフォーム上のLinkLabel llにカーソルがいったときにポップアップするようなコード
LinkLabel ll = new LinkLabel();
ll.MouseHover += new EventHandler(ll_MouseHover);
//
private void ll_MouseHover(object sender, EventArgs e){
FloatingForm ff = new FloatingForm();//< NoBorderなポップアップ用の自作継承Form
ff.Location = MousePosition;
ff.Show();
//この時点でメインフォームのフォーカスがポップアップウィンドウに行ってしまい、タイトルが薄い青に
}
>>661 GCのせい。
アンマネージドにデリゲートオブジェクトの参照を渡そうとしても、
参照じゃなくてデリゲートオブジェクトがマーシャリングされた関数ポインタとして渡される。
だからGCは、スコープを抜けた時点でもうそのデリゲートオブジェクトへの参照がないと判断してデリゲートオブジェクトを破棄しちゃうって訳。
フィールドとしてデリゲートオブジェクトを持っておけば、
その保持クラスのインスタンスが破棄されるまで(staticならアプリケーションの終了まで)破棄されることはない。