StatusStrip の ToolStripStatusLabel の場所に ContextMenuStrip を表示したいと考えています。通常のコントロールには PointToScreen / PointToClient / などがありますが、ToolStripStatusLabel は Component から派生しているため、ありません。
どんな助けでも大歓迎です。
StatusStrip の ToolStripStatusLabel の場所に ContextMenuStrip を表示したいと考えています。通常のコントロールには PointToScreen / PointToClient / などがありますが、ToolStripStatusLabel は Component から派生しているため、ありません。
どんな助けでも大歓迎です。
私がたまたま同じ問題に苦労してこの質問をグーグルで検索したという理由だけで、非常に非常に遅い答えです。私が最良の解決策として見つけたものは、これまでの答えに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の左上隅にメニューが表示されます。記録のために。
ToolStripStatusLabel のBoundsプロパティを確認してください。必要なことを行うには、次のように使用します。
contextMenuStrip1.Show(statusStrip1, toolStripStatusLabel2.Bounds.X, toolStripStatusLabel2.Bounds.Y);
次のようなことはできませんか?
int x = label.Bounds.Location.X + statusStrip.Location.X;
int y = label.Bounds.Location.Y + statusStrip.Location.Y;
menu.Show(this, x, y);
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));
}