- ふらっと C#,C♯,C#(初心者用) Part115©2ch.net
363 :デフォルトの名無しさん[]:2015/05/11(月) 23:04:23.59 ID:HvlWSqoB - WinFormsのことで質問させていただきます
あるフォームで受け取った情報を元に子フォームを新たに表示させ、ユーザーに通知するアプリを書いてます 子フォームの方をどうしてもアクティブにしたくないのでCreateParamsをオーバーライドしてWS_EX_NOACTIVATEを付与しています (また、通知を目的としているのでWS_EX_TOPMOSTも付与しました) この時、子フォームの方でコンテキストメニューのアイテムをクリックするとアクティブになろうとし、親フォームも前面に表示されてしまいます 見た目がお粗末なので、アクティブにしたくない(≒親フォームを前面に表示したくない)のですがどうすればいいでしょうか? コンテキストメニューはContextMenuStripを使用しています メニューを表示した時点では何も起こらず、アイテムにカーソルを合わせて(左,中,右いずれも)クリックを押下した時点で現象が発生します アイテム自体はToolStripMenuItemクラスのものを動的に生成したものをToolStripItemCollection.Add()で追加しています ToolStripMenuItemクラスのPerformClick()が「マウスでクリックされたときに、ToolStripItem をアクティブにします。」という不穏なものだったので、アイテムを継承して隠蔽してみても同様に押下時点でアクティブになってしまいました 親フォームにもWS_EX_NOACTIVATEを付与してみても変わらず、クリックに関するあらゆるイベントを一旦外してみても変わりませんでした
| - ふらっと C#,C♯,C#(初心者用) Part115©2ch.net
371 :デフォルトの名無しさん[]:2015/05/11(月) 23:39:34.20 ID:HvlWSqoB - >>367
上に挙げた操作以外ではアクティブになりません WM_MOUSEACTIVATEを受け取りメッセージのResultをWA_NOACTIVATEを代入して返すのも既に試してダメでした 他にあるかどうか調べてます >>368 言葉不足ですみません、 説明上便宜的に親と子という単語を使っただけで特別何かしらの関係があるわけではありません
|
|