2009-10-11 11 views

答えて

20

私はそれを考え出した:

layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y); 
+5

厳密にこれが答えではない、言えば、質問に。これは、ボタンのすぐ下のポイントではなく、ポインタの位置にコンテキストメニューを表示します。 –

+0

私はここにきて、これを正確に探しました。ありがとうございました!! –

+0

ContextMenu.Show()メソッドにはいくつかのオーバーロードがあります。あなたの場合、良い解決策はこれでしょう。 'layoutMenus.Show(Button1、new Point(0、Button1.Height))' – AeonOfTime

1

ていることを確認してください、あなたはそれを正しいスクリーン座標を通過し、コンテキストメニューを配置しているとき。 Control.PointToScreenのようなものを、親のコントロールの位置に基づいてx、y座標を使用して使用する必要があります。

33

を、私はこれが古い質問です知っているが、私はそれが他の人々を助けるかもしれないと思います。次のコードでは、クリックされたボタンのすぐ下にコンテキストメニューが表示され、ボタンはドロップダウンボタンのように見えます。

private void Button1_Click(object sender, EventArgs e) 
{ 
    Button btnSender = (Button)sender; 
    Point ptLowerLeft = new Point(0, btnSender.Height); 
    ptLowerLeft = btnSender.PointToScreen(ptLowerLeft);   
    ctMenuStrip.Show(ptLowerLeft); 
} 
+0

これはあなたのソリューションで探している動作です!私は、保護オーバーライドOnMouseClick(DataGridViewCellMouseEventArgs e)内でそれを行う方法を把握できません...私は、DataGridViewCellのすぐ下にContextMenuStripを配置しようとしています。 –

+0

@ D.Allen:.NETのDataGridViewクラスについて話していて、DataGridViewから継承したクラスのOnCellMouseClickイベントをオーバーライドしているようです。もしそうなら、正確に何をしたいのかを記述してください。私は、DataGridViewCellMouseEventArgsオブジェクトから位置、X/Y座標を取得できると思います。 –

+0

このソリューションは、タスクバーの近くにボタンを配置し、コンテキストメニューストリップを表示するためのボタンをクリックするエッジケースをカバーしていません。メニューストリップは、オーバーフローのためにボタンを隠すことがありますが、 '期待される'動作はメニューを反転してからボタンの上に移動する必要があります。しかし、そのようなフリップを達成する簡単な方法はありません。 –

-1

簡単な方法

contextMenuStrip1.Show(Button1を、 Button1.PointToClient(Cursor.Position));

+0

まったく仕事。 –

3

は、私の知る限りでは、必要なコードはここにあった:

//ボタン

ContextMenuName.Show(ButtonName.Left + this.Left, ButtonName.Top + ButtonName.Height + this.Top); 

の下部にあるボタン

ContextMenuName.Show(ButtonName.Left + ButtonName.Width + this.Left, ButtonName.Top + this.Top); 

の右側にボタンの右下に

ContextMenuName.Show(ButtonName.Left + ButtonName.Width + this.Left, ButtonName.Top + ButtonName.Height + this.Top); 
+0

「ここ」とは何ですか?フォーム自体を意味しますか?計算が機能せず、メニューが予期しない場所に表示されます。 –

1

私はtoolstripDropDownを持っていて、toolstripDropDownボタンをクリックした後、私はコンテキストメニューを表示したかったのです。 上記のコメントから、toolStripDropDown_Openiningイベントでコードを次のように変更しました。 正常に動作します。

void toolStripDropDownButton_DropDownOpening(object sender, EventArgs e) 
    { 


      ToolStripDropDownButton btnSender = (ToolStripDropDownButton)sender; 
      Point ptLowerRight = new Point(btnSender.Bounds.Right, btnSender.Bounds.Bottom); 
      ptLowerRight = PointToScreen(ptLowerRight); 
      contextMenuStrip.Show(ptLowerRight); 
    } 
4

ボタンの右側に並ぶボタンの下ContexMenuName、(ボタンの下に、左に展開): ContexMenuName.Show(ButtonName, new Point(ButtonName.Width - ContexMenuName.Width, ButtonName.Height)); 希望これはSBを助ける:)

+0

私は@ saper_2ソリューションを使用しています。 –

関連する問題