C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

コンテキストメニューとステータスバー


(過去ログ 3 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■2886 / inTopicNo.1)  コンテキストメニューとステータスバー
  
□投稿者/ 津田子 一等兵(21回)-(2006/03/22(Wed) 15:26:32)

分類:[C#] 


分類:[C#] 

いつもお世話になっております。
コンテキストメニューのメニュー項目を選択した時、ステータスバーにその説明を表示するようにしたいと思っています。

まずメインメニューを作成し、メインメニューの一部のメニュー項目をMenuItem.CloneMenu()メソッドでコピーし、寄せ集めてコンテキストメニューを作成しました。
メインメニュー、コンテキストメニューとも表示がSelectイベント、非表示がOnMenuCompleteメソッドで実装しているのですが、コンテキストメニューを閉じたとき、ステータスバーにその説明が残ったままになってしまいます(他の動作はうまくいっています)。

開発環境はVisual Studio .NET2003 です。
コンテキストメニューを閉じたときにステータスバーの説明を消す方法のご教示をよろしくお願いします。

0
引用返信 編集キー/
■2887 / inTopicNo.2)  Re[1]: コンテキストメニューとステータスバー
□投稿者/ まどか 曹長(92回)-(2006/03/22(Wed) 16:30:50)

分類:[C#] 

> メインメニュー、コンテキストメニューとも表示がSelectイベント、非表示がOnMenuCompleteメソッドで実装しているのですが、コンテキストメニューを閉じたとき、ステータスバーにその説明が残ったままになってしまいます。

たぶんForm.MenuCompleteのためではないでしょうか?
つまり、別途作成されたContextMenuオブジェクトなのでFormとは関連が無いということです。
Form.ContextMenu = WatashiNoContextMenuの設定があればうまくいくかもしれません。
ただし、自動で表示されるようになるので表示したくないポイントの制御は必要です。

ちなみに上記の一文(Control.ContextMenuへの関連付け)をせずにShowした場合
アクセスキー(例えば"ファイル(F)"に対してFキー)が効かないはずです。

#最悪?タイマーで自動的に3秒後に消す、、、なんて方法もあります。

0
引用返信 編集キー/
■2889 / inTopicNo.3)  Re[2]: コンテキストメニューとステータスバー
□投稿者/ 津田子 一等兵(22回)-(2006/03/23(Thu) 09:47:02)

分類:[C#] 

まどかさん、ありがとうございます。
まどかさんの詳しいご説明に「なるほど!」と感心&納得させられました。

...とは申し上げたものの、まだ実験(?)半ばですので解決BOXへのチェックはもう少し先になると思います。

先にお礼だけでも...と思い、レスをつけさせていただきました。

0
引用返信 編集キー/
■2910 / inTopicNo.4)  Re[2]: コンテキストメニューとステータスバー
□投稿者/ 津田子 一等兵(23回)-(2006/03/24(Fri) 15:03:34)

分類:[C#] 

コンテキストメニューについて、まどかさんのご意見を参考に実験&いろいろググってみたのですが先行きが見えないので再び質問させていただきます。

> Form.ContextMenu = WatashiNoContextMenuの設定があればうまくいくかもしれません。

設定したのですが、うまく動いてくれませんでした。
折角教えていただいたのにすみません。

手近にあるアプリケーション(IEとサクラエディタ)の動作をみたのですが、どうやらステータスバーのテキストが消えるタイミングがメインメニューとコンテキストメニューでは異なるらしい、というところまでわかりました。

・メインメニュー:メニュー項目からマウスポインタが離れたとき
・コンテキストメニュー:コンテキストメニューが表示されなくなったとき

...ということは、「コンテキストメニューが不可視になったタイミングを拾えれば万事OK!?」と思ったのですが、そのタイミングを拾う方法がわかりません。
どうぞご教示お願いします。

> #最悪?タイマーで自動的に3秒後に消す、、、なんて方法もあります。

今の私にとっては、とても魅力的な手段です。

0
引用返信 編集キー/
■2912 / inTopicNo.5)  Re[3]: コンテキストメニューとステータスバー
□投稿者/ まどか 曹長(93回)-(2006/03/24(Fri) 16:17:45)

分類:[C#] 

> ...ということは、「コンテキストメニューが不可視になったタイミングを拾えれば万事OK!?」と思ったのですが、そのタイミングを拾う方法がわかりません。

標準ではできませんね。
というか、Controlから継承されたクラスではないからでしょう。
やるとしたら面倒なことになるのではと思いつつ、結構サンプルがあったりとも思ったりして。

>>#最悪?タイマーで自動的に3秒後に消す、、、なんて方法もあります。
>
> 今の私にとっては、とても魅力的な手段です。

これもメッセージ表示の入り口がひとつになるという点ではコードがすっきりしますが
Select→タイマスタートに対してメニュー上ポインタを移動しまくった場合を考えると
結構細かな考慮が必要だったりします。

うーん、あまりお力になれませんでしたね。。。

0
引用返信 編集キー/
■2916 / inTopicNo.6)  Re[4]: コンテキストメニューとステータスバー
□投稿者/ 津田子 一等兵(24回)-(2006/03/24(Fri) 17:57:17)

分類:[C#] 

> やるとしたら面倒なことになるのではと思いつつ、結構サンプルがあったりとも思ったりして。

では、早速探しに行ってきます。
もう既に発見済みでしたら、検索キーワードだけでもこっそり教えていただけるとありがたいです。

> うーん、あまりお力になれませんでしたね。。。

いいえ、とんでもないです。おかげでまたひとつ賢くなれましたし(爆)。
本当にありがとうございます。

0
引用返信 編集キー/
■2918 / inTopicNo.7)  Re[5]: コンテキストメニューとステータスバー
□投稿者/ 津田子 一等兵(25回)-(2006/03/24(Fri) 18:23:54)

分類:[C#] 

2006/03/27(Mon) 11:27:09 編集(投稿者)

自己レスです。

コンテキストメニューが消えるタイミングってフォーム上でクリックまたはEnterキーが押下された瞬間だ!と思いつき、FormのClickイベントとKeyDownイベントの中に
   statusBar.Text = string.Empty;
と記述したところ、思い通りに動作するようになりました。

根本的な解決にはなっていないのかもしれませんが、これがいちばんシンプルかつ安定した方法だと思いますので、解決とさせていただきます。

ありがとうございました。

0
引用返信 編集キー/
■2919 / inTopicNo.8)  Re[6]: コンテキストメニューとステータスバー
□投稿者/ まどか 曹長(95回)-(2006/03/24(Fri) 18:47:31)

分類:[C#] 

> コンテキストメニューが消えるタイミングってフォーム上でクリックまたはEnterキーが押下された瞬間だ!と思いつき、FormのClickイベントとKeyDownイベントの中に
>    statusBar.Text = string.Empty;
> と記述したところ、思い通りに動作するようになりました。

それではだめです。。。
他のアプリケーションやデスクトップをクリック、ESCキー、、、
発生要因はいくらでもあります。
つまり外部の事象を根拠にすると無限にありそれを表現するのは困難です。
結果がどうあれ、ContextMenuを主体とした考え方でなければなりません。

解決済み
引用返信 編集キー/
■2949 / inTopicNo.9)  Re[7]: コンテキストメニューとステータスバー
□投稿者/ 津田子 一等兵(26回)-(2006/03/27(Mon) 11:49:47)

分類:[C#] 

週末はオフラインだったため、ご回答をいただいたことに気づきませんでした。
失礼しました。

> つまり外部の事象を根拠にすると無限にありそれを表現するのは困難です。
> 結果がどうあれ、ContextMenuを主体とした考え方でなければなりません。

...おっしゃるとおりです。グゥの音も出ません。
しばらくはグーグル先生と深い仲になりそうです(T-T)

あと、解決Boxのチェックははずさせていただきました。ご了承あそばせ。

0
引用返信 編集キー/
■2978 / inTopicNo.10)  Re[8]: コンテキストメニューとステータスバー
□投稿者/ まどか 准尉(100回)-(2006/03/28(Tue) 18:11:11)

分類:[C#] 

ContextMenuプロパティを設定して右クリックすると、そのコントロールのMouseEnter(閉じたあと)とMouseLeave(表示後)が発生するようです。

と言ってはみたものの、ポインタをコントロール外にしてESCを押すとだめですね。。。
標準では無理みたいですね。
どうしてもというならタイマーを駆使するか
いっそ、独自のフォームをベースにした偽メニューを作るか。
#リストボックスのHoverSelectionを使いアイコンをオーナードローすればそれっぽく?

0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -