检测剪贴板中的粘贴 在工具条文本框 (C#)

本文关键字:文本 工具 剪贴板 检测 | 更新日期: 2024-10-25 10:12:17

我需要检测用户是否将剪贴板中的文本粘贴到ToolStripTextBox中。因此,我创建了一个从 ToolStripTextBox 继承的自定义控件。然后我想覆盖 WndProc 以捕获WM_PASTE消息,但我注意到没有要覆盖的 WndProc。对于标准文本框,所描述的方法工作正常。

任何建议如何检测工具条文本框上的剪贴板中的粘贴?

检测剪贴板中的粘贴 在工具条文本框 (C#)

ToolStripTextBox中的WndProc似乎遥不可及。出于好奇,我搜索了一下,发现了这个答案——https://stackoverflow.com/a/4688745/168719

如果无法使用ToolStripControlHost,对于需要自定义处理 WndProc 的方案,还有其他聪明的解决方案:

http://bytes.com/topic/c-sharp/answers/279168-toolstriptextbox-right-click

尼古拉斯·帕尔迪诺 [.NET/C# MVP]

我刚刚注意到这一点。为了解决这个问题,你可以得到 通过调用文本框属性承载文本框。那么,你应该 能够创建一个派生自 NativeWindow 的类,该类覆盖 WndProc 方法忽略上下文菜单消息 [或拦截WM_PASTE,显然...] 获取文本框属性时,获取句柄,并将句柄分配给重写的 NativeWindow 类。

如果你在Windows[Windows Forms/WPF]中,你可以使用剪贴板来检测数据。

if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
            {
            richTextBox1.Paste();
            MessageBox.Show("You have data in clipboard")
            }

(编辑以包括 WPF)

ToolStripTextBox

是一个包含标准文本框的宿主控件,您需要按照所述进行操作,但将 ToolStripTextBox.TextBox 替换为您的文本框,不幸的是它是一个只读属性。

因此,您需要从 ToolStripControlHost 派生一个 MyToolStripTextBox,以便能够更改它托管的控件类型。