C# ContextMenu与ContextMenuStrip的位置

C# ContextMenu与ContextMenuStrip的位置,c#,.net,position,contextmenu,contextmenustrip,C#,.net,Position,Contextmenu,Contextmenustrip,我试图将第一个ContextMenuStrip作为菜单添加到应用程序中。但是,只有ContextMenu出现在应用程序窗口的边界内,ContextMenuStrips出现在应用程序窗口的外部 我开始维护的这个应用程序是一种停靠或工具栏,其工作原理类似于Windows任务栏;它占用了屏幕的一个边缘,其他窗口无法在其上显示或最大化。此应用程序当前在屏幕顶部运行,ContextMenuStrips水平显示在正确的坐标处,但垂直显示在应用程序窗口的底部不正确 (我对维护这个应用程序还不熟悉,所以我不确定

我试图将第一个ContextMenuStrip作为菜单添加到应用程序中。但是,只有ContextMenu出现在应用程序窗口的边界内,ContextMenuStrips出现在应用程序窗口的外部

我开始维护的这个应用程序是一种停靠或工具栏,其工作原理类似于Windows任务栏;它占用了屏幕的一个边缘,其他窗口无法在其上显示或最大化。此应用程序当前在屏幕顶部运行,ContextMenuStrips水平显示在正确的坐标处,但垂直显示在应用程序窗口的底部不正确

(我对维护这个应用程序还不熟悉,所以我不确定它是如何控制其他窗口不能以与任务栏相同的方式在上面显示或最大化的。)

编辑与图像澄清; 紫色线是显示器的边界,浅蓝色框是应用程序的边界,其行为类似于Windows任务栏,深蓝色框是我们要单击以使菜单显示的按钮的边界,绿色框是该按钮的上下文菜单的边界(如预期),问题是橙色框是ContextMenuStrip的边界(它显示在应该显示的位置下方)。我希望橙色框显示在与绿色框相同的位置


如何创建
ContextMenuStrip
以及如何显示

本例使用动态创建的
ContextMenuStrip
,它对我有效:

ContextMenuStrip cms = new ContextMenuStrip();

private void button4_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        cms.Items.Add("Test Menu");
        cms.Show(button4.PointToScreen(e.Location));
    }
}
然而,动态创建应该是无关的


但也许你提到的对接干扰了?它是如何实现的?

这里的问题到底是什么,从ContextMenuStrip和ContextMenu中可以得到什么位置?感谢演示,我自己也有类似的东西,可以将问题分解到上面的图表中。“它是如何实现的?”是一个很好的问题,我觉得在任何人进一步了解之前,我需要弄清楚这一点