- - PR -
非アクティブのウィンドウのメニュー操作について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-07 23:56
VB2005で作成したアプリケーションにおける、非アクティブ時のメニュー操作についてご教授下さい。
MenuStripやToolStripにて、メニューバーやツールバーを作成したアプリケーションにおいて、ウィンドウが非アクティブの際に、そのウィンドウのメニュー項目を1回クリックすると、まずはウィンドウがアクティブになり、もう1回クリックするとメニュー項目が開きます。 そこで、アプリケーションが非アクティブの場合であっても、クリック1回でメニューやツールを一気に開くにはどのように設定すればいいのでしょうか? なお、シェアウェアの「Becky!」や「秀丸エディタ」等のアプリケーションはこのような操作ができます。 どうぞ宜しくお願い致します。 | ||||||||
|
投稿日時: 2007-04-08 01:22
Activate と MouseDown のメッセージを補足して、マウスの位置とボタンの位置で判断することになりそうです。
2 つとも古くからあるアプリケーションであり、最近のトレンドではないかもしれません。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-04-08 16:01
けんたろです。じゃんぬねっとさん早速のご返答有難うございます。
アドバイス有難うございます。 しかし、Buttonコントロールであればプロパティ等の設定を特別意識してしなくても、非アクティブ状態でもクリック1回で動作するのに、MenuStripやToolStripコントロールの場合はプログラムに工夫がいるのですね・・。 アドバイスを参考にして挑戦してみようと思いますが、私はVBのアプリケーション開発入門等の文献をかじってプログラムを作っている程度のレベルなので、もし宜しければ、サンプルをご教授いただけますと大変助かります。 じゃんぬねっとさんのHPを拝見いたしましたが、どのサンプルを応用したら実現できるのかわからなかったため、お手数をおかけしますが、どうぞ宜しくお願い致します。 | ||||||||
|
投稿日時: 2007-04-08 18:27
じゃんぬねっと氏が言いたいのはそういうのじゃなくって。 MenuStripやToolStripではこれが標準動作でこの動きを変えるのは面倒くさい。 だから別のコントロールを使ったら?といいたいんだと思う。 ToolBarの話題が出ているくらいだし。調べたかい? [ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2007-04-08 18:29 ] | ||||||||
|
投稿日時: 2007-04-08 20:55
けんたろです。ぶさいくろうさんコメント有難うございます。
勉強不足で恐縮です。ToolBar関連でまた調べて、プログラム作りに挑戦してみます。 | ||||||||
|
投稿日時: 2008-03-04 14:57
古いスレッドを掘り返してすみません。
僕のアプリでも同様の処理が必要になり調べてみました。 好みの問題は、 「非アクティブなウィンドウがクリックされた時のガイドライン? (atmarkit.co.jp)」 にある通りですのでさて置きまして、 SDIのフォーム・アプリを作っていて、 フォーム1とフォーム2があったとして、フォーム1にフォーカスがあるとき、 フォーム2のツールボタン(ToolStripButton)が押せるようにするか、 押せないようにするか? 要件によりますので、一概には言えませんが、 .NET Frameworkの標準(デフォルト?)の動きは、少しおかしいと思います。 なぜなら、フォーム1にフォーカスがあっても、フォーム2のツールボタンが ハイライトし、押せそうな雰囲気がするからです。 なぜ、このような仕様になったのかと考えてみましたが、 MDIであれば、フォーカスのないフォームのツールボタンも押せるようですので、 SDIアプリに対してあまり配慮されてないのかと思っています。 いずれにせよ、何らかの対策が必要でしたので、 以下のようにコーディングして、フォーカスがなくても押せるようにしてみました。
ToolStripButton1には、マウス移動系のイベントは来ますが、 押下系イベントが来ないため、 ボタン上にマウスがあるときに、アクティベイトが発生した場合、 クリックとみなすようにしました。 仮実装ですので、まだ、抜けがあるかも知れません。 | ||||||||
|
投稿日時: 2008-03-04 16:47
CurrentToolStripButtonを、CurrentToolStripItemに変えて、
CurrentToolStripButton.Checked = !CurrentToolStripButton.Checked; を、 CurrentToolStripItem.PerformClick(); としてみました。 しかし、PerformClick()では、メニュー(ToolStripMenuItem) が選択されないようです。
| ||||||||
|
投稿日時: 2008-03-05 13:13
以前同じ質問があったような。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=39021&forum=7 を参照してください。 |