C# menustrip下拉菜单自动收回问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# menustrip下拉菜单自动收回问题相关的知识,希望对你有一定的参考价值。

怎么能让这个菜单在鼠标移开的时候就收回呢?

//指定横向菜单单击事件
tm.MouseEnter += new EventHandler(tm_MouseEnter);
tm.MouseLeave += new EventHandler(tm_MouseLeave);
//指定下拉菜单单击事件
tm1.Click += new EventHandler(tm1_Click);

//即时显示下拉菜单
void tm_MouseEnter(object sender, EventArgs e)

timer1.Stop();
ToolStripMenuItem tm = (ToolStripMenuItem)sender;
tm.ShowDropDown();

//即时收回下拉菜单
void tm_MouseLeave(object sender,EventArgs e)

ToolStripDropDownItem ts = (ToolStripDropDownItem)sender;
ToolStripMenuItem tm = (ToolStripMenuItem)sender;
tm.HideDropDown();//这里该怎么写呢,现在是只要离开横向菜单就收回了

参考技术A 你到底问的是什么啊,前面说“怎么能让这个菜单在鼠标移开的时候就收回呢?”,后面又说“现在是只要离开横向菜单就收回了”,它们之间区别是什么?追问

就是想让鼠标离开这个下拉菜单的时候就收回,或者在桌面上点一下就收回也可以

追答

看看是否附件里面的效果?

追问

呵呵 你的现在和我的一样,你看能点到新建吗 我的现在就这样

本回答被提问者采纳

C# WPF 菜单条控制器

【中文标题】C# WPF 菜单条控制器【英文标题】:C# WPF MenuStrip Controller 【发布时间】:2016-11-16 16:32:43 【问题描述】:

我正在尝试通过创建 WindowsFormsHost 并添加 MenuStrip 作为其子项,在 C# 中使用 WPF 制作 MenuBar。请注意,我使用 WindowsFormsHost 控制器的属性页添加菜单和菜单项。

当我完成后,项目构建并成功运行,但在生成的“xaml”文件中显示一些错误,并且设计器没有加载设计。

这是生成的 XAML 代码

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" x:Class="FrontEnd.AppMainWindow"
    Title="AppMainWindow" Height="351" Width="826">
<Grid>
    <WindowsFormsHost x:Name="menuStripHost" HorizontalAlignment="Left" Height="23" VerticalAlignment="Top" Width="818">
        <Forms:MenuStrip Visible="True" Name="appMainMenu">
            <Forms:MenuStrip.Items>
                <Forms:ToolStripMenuItem Text="File">
                    <Forms:ToolStripMenuItem.DropDownItems>
                        <Forms:ToolStripMenuItem ShortcutKeys="Ctrl+N" Text="New Project"/>
                        <Forms:ToolStripMenuItem ShortcutKeys="Ctrl+O" Text="Open Project"/>
                        <Forms:ToolStripMenuItem Text="Exit"/>
                    </Forms:ToolStripMenuItem.DropDownItems>
                </Forms:ToolStripMenuItem>
                <Forms:ToolStripMenuItem Text="View">
                    <Forms:ToolStripMenuItem.DropDownItems>
                        <Forms:ToolStripMenuItem Text="Configuration Window"/>
                    </Forms:ToolStripMenuItem.DropDownItems>
                </Forms:ToolStripMenuItem>
                <Forms:ToolStripMenuItem Text="Help">
                    <Forms:ToolStripMenuItem.DropDownItems>
                        <Forms:ToolStripMenuItem Text="User Manual"/>
                        <Forms:ToolStripMenuItem Text="Help"/>
                    </Forms:ToolStripMenuItem.DropDownItems>
                </Forms:ToolStripMenuItem>
            </Forms:MenuStrip.Items>
        </Forms:MenuStrip>
    </WindowsFormsHost>

</Grid></Window>

这是错误

错误 2 无法将指定的值分配给集合。应为以下类型:“字符串”。

标签为“Forms:ToolStripMenuItem”的所有行都会出现相同的错误

更新: 尝试删除 ShortcutKeys 属性,问题依然存在(与上述相同的错误)。 这是修改后的代码...

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" x:Class="FrontEnd.AppMainWindow"
    Title="AppMainWindow" Height="351" Width="826">
<Grid>
    <WindowsFormsHost x:Name="menuStripHost" HorizontalAlignment="Left" Height="23" VerticalAlignment="Top" Width="818">
        <Forms:MenuStrip Visible="True" Name="appMainMenu">
            <Forms:MenuStrip.Items>
                <Forms:ToolStripMenuItem Text="File">
                    <Forms:ToolStripMenuItem.DropDownItems>
                        <Forms:ToolStripMenuItem Text="New Project"/>
                        <Forms:ToolStripMenuItem Text="Open Project"/>
                        <Forms:ToolStripMenuItem Text="Exit"/>
                    </Forms:ToolStripMenuItem.DropDownItems>
                </Forms:ToolStripMenuItem>
                <Forms:ToolStripMenuItem Text="View">
                    <Forms:ToolStripMenuItem.DropDownItems>
                        <Forms:ToolStripMenuItem Text="Configuration Window"/>
                    </Forms:ToolStripMenuItem.DropDownItems>
                </Forms:ToolStripMenuItem>
                <Forms:ToolStripMenuItem Text="Help">
                    <Forms:ToolStripMenuItem.DropDownItems>
                        <Forms:ToolStripMenuItem Text="User Manual"/>
                        <Forms:ToolStripMenuItem Text="Help"/>
                    </Forms:ToolStripMenuItem.DropDownItems>
                </Forms:ToolStripMenuItem>
            </Forms:MenuStrip.Items>
        </Forms:MenuStrip>
    </WindowsFormsHost>

</Grid></Window>

【问题讨论】:

找到了一个很好的替代方法来创建 WindowsFormsHost 并在其中创建 MenuStrip,我使用 WPF Menu 和 MenuItem 控制器来实现菜单。这是link 用一个例子来介绍他们 【参考方案1】:

我认为在您的 ToolStripMenuItems 中,您正在为 ShortcutKeys 属性分配一个字符串: ShortcutKeys="Ctrl+N"... 根据文档,这应该是“键”类型; https://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripmenuitem.shortcutkeys%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

【讨论】:

尝试删除 ShortcutKeys 属性,问题依旧存在... 你确定吗?您可以将您现在拥有的内容添加到问题的底部吗? 请再看一下这个问题,因为我按照您的要求进行了更新。

以上是关于C# menustrip下拉菜单自动收回问题的主要内容,如果未能解决你的问题,请参考以下文章

asp二级联动下拉菜

vue 点击弹出下拉菜单 点击其他页面收回菜单

c#的combobox自动隐藏下拉列表的问题

html 链接点击一下显示下拉内容(再点击一下自动收回),上一次点击内容自动收回,代码怎么写?谢谢!

如果空格键在所有浏览器中打开下拉菜单,为啥我的 onchange 触发菜单被认为无法访问

无法修复 laravel 上的顺风组件下拉菜单