我正在使用VB.NET中的WinForms解决方案。已经有一段时间了,因为我主要是一个网络开发者。所以我需要做的是复制Microsoft Office产品的行为,用于剪切,复制,粘贴和撤消菜单和工具栏。哪个meens,我需要在时启用剪切和复制,并且仅当在表单上有一些选定的文本时。只有在剪贴板中有一些文本时才必须启用粘贴菜单。
你对如何做到这一点有任何想法吗?我可能需要检查TextBox中的某个事件来检查是否选择了某些文本(MouseUp?)。然后在Enter事件中,我会检查剪贴板中是否有东西启用粘贴菜单...
如果您有任何建议,样品等,我将非常感激!
非常感谢!
答案 0 :(得分:1)
如果您使用的是标准的WinForms控件,则应该都是默认行为。除非您有自定义上下文菜单,否则您不需要自己实现。
答案 1 :(得分:1)
Application.Idle事件很适合这样做,它在检索到最后一个输入事件后运行。您只需要检查当前活动的控件是否能够复制/粘贴。使用带有3个按钮的ToolStrip,使表单的代码看起来与此类似:
Public Class Form1
Public Sub New()
InitializeComponent()
AddHandler Application.Idle, AddressOf UpdateButtons
End Sub
Protected Overrides Sub OnFormClosing(ByVal e As System.Windows.Forms.FormClosingEventArgs)
RemoveHandler Application.Idle, AddressOf UpdateButtons
MyBase.OnFormClosing(e)
End Sub
Private Sub UpdateButtons(ByVal sender As Object, ByVal e As EventArgs)
Dim box = TryCast(Me.ActiveControl, TextBoxBase)
CopyButton.Enabled = box IsNot Nothing And box.SelectionLength > 0
CutButton.Enabled = CopyButton.Enabled
PasteButon.Enabled = box isnot Nothing and Clipboard.ContainsText
End Sub
Private Sub CopyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopyButton.Click
Dim box = TryCast(Me.ActiveControl, TextBoxBase)
If box isnot Nothing then box.Copy()
End Sub
'' etc...
End Class
答案 2 :(得分:0)
首先,如果你没有与WinForms绑定,请切换到WPF,因为这更容易实现,因为内置命令和更友好的技术恕我直言。
对于剪切和复制,您可以分别使用Cut
/ Copy
/ Paste
方法,这些方法自.NET 3以来就存在于TextBoxBase类中。
您的难题中更难处理的是通过工具栏处理全局范围内的命令。您需要实施command pattern才能实现这一目标。