如何解决NSTextView中的上下文菜单
| 我正在为用户使用NSTextView键入他们的响应。我打开了连续拼写检查,不正确的单词下面有一条红线。我有一个共享的SpellChecker,正在使用中。但我希望用户右键单击并更正拼写。我有以下问题- 在“文本编辑”中,右键单击该单词会突出显示该单词,我该如何实现?我打算获取selectedrange并将其传递给拼写检查器。 将拼写检查建议添加到上下文菜单后,当我转到下一个单词时它仍会显示,因此在添加任何新项目之前,我应始终清除上下文菜单吗? 我正在使用Monobjc,当我执行以下代码时,出现异常- var t = Menu.ItemArray; foreach(t中的var s) { var menuItem = s.CastAsSystem.InvalidCastException: Cannot cast from source type to destination type.
at example.test.MacOS.UI.HTML.ESView.MenuForEvent (Monobjc.Cocoa.NSEvent theEvent) [0x00000] in <filename unknown>:0
at Monobjc.Dynamic.Proxies.example.test.MacOS.UI.HTML.ESView.MenuForEvent_Monobjc_Cocoa_NSEvent (IntPtr receiver,IntPtr selector,IntPtr ) [0x00000] in <filename unknown>:0
at (wrapper native-to-managed) Monobjc.Dynamic.Proxies.example.test.MacOS.UI.HTML.ESView:MenuForEvent_Monobjc_Cocoa_NSEvent (intptr,intptr,intptr)
at (wrapper managed-to-native) E5EEC20A:pinvoke (intptr,intptr)
at E5EEC20A.objc_msgSendSuper (IntPtr receiver,System.Object[] parameters) [0x00000] in <filename unknown>:0
at Monobjc.Bridge.Generators.DynamicMessagingGenerator.SendMessage (System.String message,IntPtr receiver,System.Object[] parameters) [0x00000] in <filename unknown>:0
at Monobjc.ObjectiveCRuntime.SendMessageSuper (IManagedWrapper receiver,Monobjc.Class cls,System.String selector,System.Object[] parameters) [0x00000] in <filename unknown>:0
at Monobjc.Id.SendMessageSuper (Monobjc.Class cls,System.Object[] parameters) [0x00000] in <filename unknown>:0
at example.test.MacOS.UI.App.Application.SendEvent (Monobjc.Cocoa.NSEvent theEvent) [0x00000] in <filename unknown>:0
at Monobjc.Dynamic.Proxies.example.test.MacOS.UI.App.Application.SendEvent_Monobjc_Cocoa_NSEvent (IntPtr receiver,IntPtr ) [0x00000] in <filename unknown>:0
at (wrapper native-to-managed) Monobjc.Dynamic.Proxies.example.test.MacOS.UI.App.Application:SendEvent_Monobjc_Cocoa_NSEvent (intptr,intptr)
at (wrapper managed-to-native) Monobjc.ObjectiveCRuntime:objc_msgSend (intptr,intptr)
at Monobjc.ObjectiveCRuntime.SendMessage (IManagedWrapper receiver,System.String selector) [0x00000] in <filename unknown>:0
at Monobjc.Cocoa.NSApplication.Run () [0x00000] in <filename unknown>:0
at example.test.MacOS.UI.App.Application.RunApplication () [0x00000] in <filename unknown>:0
at example.test.MacOS.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
编辑-步骤3
问题3是根据洛朗的建议进行的。
解决方法
对于第1点)
NSTextView.SelectedRange
返回第一个选定范围。如果未选择任何文本,则范围的长度为0,范围的位置为光标所在字符的索引。
然后,获取对字符串上下文(NSTextView.TextStorage.String
)的引用,并在光标位置之前和之后搜索空格。您将获得选择单词的范围。
用NSTextView.SelectedRange
指定新的选择范围。
对于第2点)
右键单击后,您可以完全控制返回的Menu实例。因此,如果向其中添加项目,则必须自己删除它们。
对于第3点)
看起来像个错误。如注释中所述,在索引循环中使用NumberOfItems
和ItemAtIndex
方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。