在任务栏上绘制 ContextMenuStrip
Draw ContextMenuStrip over taskbar
我想知道是否有一些方法可以在任务栏上绘制元素?
例如,我有一个在屏幕左下角显示上下文菜单的应用程序。我试过 ContextMenu
和 ContextMenuStrip
,我想用第二个。 ContextMenu
正在任务栏上绘制,但 ContextMenuStrip
不是 - 它只是在任务栏上方显示了一些像素。
有没有办法在任务栏上绘制 ContextMenuStrip
?
终于找到答案了。 ContextMenuStrip 有 internal ShowInTaskbar method:
internal void ShowInTaskbar(int x, int y)
不能正常使用,但可以调用(一般不推荐,会导致线程时序逻辑出现一些错误)。不过,如果你想使用一些内部或私有的 类' 方法,你可以按照以下方式进行:
MethodInfo mi = typeof(ContextMenuStrip).GetMethod("ShowInTaskbar", BindingFlags.Instance | BindingFlags.NonPublic);
mi.Invoke(contextMenuStrip1, new object[] { mousePositionX, mousePositionY });
您只需发送正确的菜单条和鼠标坐标,以便在正确的位置显示菜单。
使用此方法后,我的 contextMenuStip1 显示在任务栏上!
我想知道是否有一些方法可以在任务栏上绘制元素?
例如,我有一个在屏幕左下角显示上下文菜单的应用程序。我试过 ContextMenu
和 ContextMenuStrip
,我想用第二个。 ContextMenu
正在任务栏上绘制,但 ContextMenuStrip
不是 - 它只是在任务栏上方显示了一些像素。
有没有办法在任务栏上绘制 ContextMenuStrip
?
终于找到答案了。 ContextMenuStrip 有 internal ShowInTaskbar method:
internal void ShowInTaskbar(int x, int y)
不能正常使用,但可以调用(一般不推荐,会导致线程时序逻辑出现一些错误)。不过,如果你想使用一些内部或私有的 类' 方法,你可以按照以下方式进行:
MethodInfo mi = typeof(ContextMenuStrip).GetMethod("ShowInTaskbar", BindingFlags.Instance | BindingFlags.NonPublic);
mi.Invoke(contextMenuStrip1, new object[] { mousePositionX, mousePositionY });
您只需发送正确的菜单条和鼠标坐标,以便在正确的位置显示菜单。
使用此方法后,我的 contextMenuStip1 显示在任务栏上!