1

.NET2.0Windowsフォームアプリケーションがあります。このアプリには、メニューバーとステータスバーを備えたフォームコントロールがあります。また、このフォームにはListViewがあります。

このフォームにコンテキストメニューを追加すると、ユーザーがメニューバーやステータスバーなどのフォームの任意の部分を右クリックすると、コンテキストメニューが開きます。

  1. メニューバー/ステータスバーをクリックしたときにコンテキストメニューが開かないようにするにはどうすればよいですか?フォームの「灰色の領域」をクリックしたときにのみ開くようにします。

  2. このフォーム(たとえば、ListView)のコントロールの上でクリックが発生した場合、どうすればこれを識別できますか?ユーザーが灰色の領域の上またはリストビューの上を右クリックしたかどうかを知りたいので、これに基づいていくつかのメニュー項目を有効/無効にできます。

4

2 に答える 2

3

ステータスバーを下部に配置し、MenuStripを上部に配置した後、

  1. フォームのContextMenuStripをNoneに設定します
  2. DockプロパティをFillに設定して、標準のPanelを中央(MenuStripとStatusStripの間)に配置します。
  3. (フォームではなく)パネルでContextMenuStripプロパティを設定します。

そして、ListViewと、フォームに配置する必要のある他のすべてのコントロールをパネルに配置します

例えば

~~~~~~~~~~~~~

menustrip

~~~~~~~~~~~~~

パネル。Dock=Fill。ContextMenuStrip=yourContextMenu。

~~~~~~~~~~~~~

StatusStrip

~~~~~~~~~~~~~

于 2008-09-20T20:53:21.260 に答える
1

私は答えを見つけました:

Point clientPos = this.PointToClient(Form.MousePosition);
Control control = this.GetChildAtPoint(clientPos);

これにより、フォームでクリックされた基になるコントロールが提供されます。クリックが灰色の領域で行われた場合はnullになります。したがって、コンテキストメニューのOpeningイベントでコントロールのタイプをテストする必要があります。MenuStrip、ToolStrip、またはStatusStripの場合は、e.Cancel=true;を実行します。

于 2008-09-20T20:50:06.167 に答える