Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取通过键盘启动ContextMenuStrip的ToolStripItem_C#_.net_Winforms - Fatal编程技术网

C# 获取通过键盘启动ContextMenuStrip的ToolStripItem

C# 获取通过键盘启动ContextMenuStrip的ToolStripItem,c#,.net,winforms,C#,.net,Winforms,在WinForms中,只有ToolStrip可以具有ContextMenuStrip,而不是ToolStripItem 因为我需要ContextMenuStrip来知道用户指的是哪个按钮,所以当鼠标按下按钮时,我有一个解决方案(通过在ContextMenuStrip.Openning获取光标位置,然后从ToolStrip获取项目),但我没有键盘选择的解决方案。理论上,可以尝试捕获ToolStrip的OnKeyDown,并尝试跟踪用户操作选择的项目,但在实践中,如果ToolStrip溢出,它可能会

在WinForms中,只有ToolStrip可以具有ContextMenuStrip,而不是ToolStripItem

因为我需要ContextMenuStrip来知道用户指的是哪个按钮,所以当鼠标按下按钮时,我有一个解决方案(通过在ContextMenuStrip.Openning获取光标位置,然后从ToolStrip获取项目),但我没有键盘选择的解决方案。理论上,可以尝试捕获ToolStrip的OnKeyDown,并尝试跟踪用户操作选择的项目,但在实践中,如果ToolStrip溢出,它可能会变得非常复杂,并且可能不可靠

有什么解决办法吗

解决方案:


我在ContextMenuStrip中玩了一点,下面是解决方案。打开处理程序执行以下操作:
toolStrip.Items.Cast().Where(x=>x.Selected)。First()
获取在按下键显示ContextMenuStrip时选择的项。

我在ContextMenuStrip中播放了一些,下面是解决方案。打开处理程序执行以下操作:
toolStrip.Items.Cast().Where(x=>x.Selected)。First()
获取在按键显示ContextMenuStrip时选择的项目。

呃,您希望用户按哪个键?用键盘无法聚焦toolstrip项。没有人会用鼠标选择一个项目,然后按一个键。如果ToolStrip有焦点,您可以使用箭头键(根据属性和Tab键),它将更改选定的ToolStripItem。您甚至可以按Enter键,它将激活Click事件。如果您按下ContextMenu键,它将激活ContextMenu。这不是问题。问题是之前选择了哪个ToolStripItem嗯,我一点也不重复,不能给ToolStrip焦点。如果你想得到答案,在文件共享服务上发布一个这样的小复制项目是明智的。我已经解决了这个问题并在上面发布了,我不知道为什么它对你不起作用,你在ToolStrip上有ToolStripItems吗?您使用过ToolStrip.Focus()方法吗?是的,按钮。发布一个答案,然后接受它,这样它就会被保留下来。