0

StatusStrip の ToolStripStatusLabel の場所に ContextMenuStrip を表示したいと考えています。通常のコントロールには PointToScreen / PointToClient / などがありますが、ToolStripStatusLabel は Component から派生しているため、ありません。

どんな助けでも大歓迎です。

4

4 に答える 4

3

私がたまたま同じ問題に苦労してこの質問をグーグルで検索したという理由だけで、非常に非常に遅い答えです。私が最良の解決策として見つけたものは、これまでの答えに1つの素晴らしいひねりを加えています。ここにあります:

    void toolStripItem_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            var label = (ToolStripItem)sender;
            this.contextMenuStrip1.Show(this.mainStatusStrip, label.Bounds.X + e.X, label.Bounds.Y + e.Y);
        } 
    }

コントロール(eX、eY)を基準にしたマウス座標を境界座標に追加すると、メニューが正確に正しい位置に表示されます。これを省略すると、ToolStripItemの左上隅にメニューが表示されます。記録のために。

于 2011-08-18T09:18:00.297 に答える
0

ToolStripStatusLabel のBoundsプロパティを確認してください。必要なことを行うには、次のように使用します。

contextMenuStrip1.Show(statusStrip1, toolStripStatusLabel2.Bounds.X, toolStripStatusLabel2.Bounds.Y);            
于 2009-07-23T03:33:59.140 に答える
0

次のようなことはできませんか?

int x = label.Bounds.Location.X + statusStrip.Location.X;
int y = label.Bounds.Location.Y + statusStrip.Location.Y;
menu.Show(this, x, y);
于 2009-07-23T03:20:10.980 に答える
0

ToolStripStatusLabel をクリックしたときにフォーム上のマウスの適切な位置を取得するには、いくつかの手順が必要です。あなたが言及したように、ToolStripStatusLabel には PointToClient または PointToScreen メソッドがありませんが、親の StatusStrip コントロールにはあります。

試す:

private void toolStripStatusLabel_MouseDown(object sender, MouseEventArgs e)
{
    Point p = e.Location;
    p.Offset(toolStripStatusLabel.Bounds.Location);
    myContextMenu.Show(StatusStrip.PointToScreen(p));
}
于 2011-02-23T20:14:22.900 に答える