C♯相談室 Part25

このエントリーをはてなブックマークに追加
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();
//この時点でメインフォームのフォーカスがポップアップウィンドウに行ってしまい、タイトルが薄い青に
}
663デフォルトの名無しさん:2005/09/07(水) 23:34:21
>>661
GCのせい。
アンマネージドにデリゲートオブジェクトの参照を渡そうとしても、
参照じゃなくてデリゲートオブジェクトがマーシャリングされた関数ポインタとして渡される。
だからGCは、スコープを抜けた時点でもうそのデリゲートオブジェクトへの参照がないと判断してデリゲートオブジェクトを破棄しちゃうって訳。
フィールドとしてデリゲートオブジェクトを持っておけば、
その保持クラスのインスタンスが破棄されるまで(staticならアプリケーションの終了まで)破棄されることはない。
664デフォルトの名無しさん:2005/09/07(水) 23:34:47
>>662

ShowWindow(this.Handle, 8);
this.Visible = true;


ShowWindowはWin32APIね。

ttp://www.gotdotnet.com/workspaces/workspace.aspx?id=167542e0-e435-4585-ae4f-c111fe60ed58
これのNotificationWindowを参考にした。