获取System.Windows.Forms.RichTextBox的标准上下文菜单

4

如何在RichTextBox中获取标准上下文菜单,就像TextBox中的菜单(复制,粘贴,输入法等)一样?如果没有现成的解决方案,我会使用P/Invoke方法。或者我真的必须按照那些奇怪的建议创建自定义菜单来获得标准菜单吗(叹气)?

1个回答

4

RichTextBoxContextMenuStrip属性可以被赋值为用户设计的上下文菜单,包括复制/剪切/粘贴等功能。对每个菜单项应用RichTextBox的方法,如CanUndo、CanCopy和CanPaste,以确定菜单项的Enabled属性。使用Copy、Cut和Paste方法将成为菜单项的点击事件所执行的方法。

希望这能帮到您, 最好的问候, Tom。


需要注意的是,TextBox确实有自己的标准上下文菜单,将其分配为null可以防止用户复制/粘贴等操作... - t0mm13b
不幸的是,那只是一个自定义上下文菜单,我不想去创建它,特别是像IME和插入Unicode字符等更复杂的选项。提到Can*属性是一个好建议,所以给个赞。我想当没有人告诉我如何获取标准菜单时,我会这样做。我真的很想在RichTextBox上拥有TextBox标准菜单。但不幸的是,似乎不可能。 - OregonGhost
1
这里有一个扩展的RichtextBox的例子:http://www.codeproject.com/KB/miscctrl/richtextboxextended.aspx。我不会去实现IME并插入Unicode字符,因为那需要涉及到PInvoke... - t0mm13b
有趣的事情。在这个特定的项目中,我们正在使用Krypton工具包,因此RichTextBox已经被封装起来了,我认为我们无法更改底层类。另一方面,Krypton样式只是一个RichTextBox的薄边框... - OregonGhost
我现在接受了这个答案。看起来这是唯一的方法。Codeproject文章是一个方便的捷径,但基本上与您已经建议的相同。 - OregonGhost
今天,我实现了这个解决方案。它可以工作,尽管CanCopy不存在。我检查了(SelectionLength > 0)来执行剪切、复制和删除。我还遇到了快捷键无法正常工作的问题,因为主窗口中的某些其他组件阻止了它们。但现在没问题了 ;) - OregonGhost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接