我需要检测用户是否将剪贴板中的文本粘贴到 ToolStripTextBox 中。因此,我创建了一个继承自 ToolStripTextBox 的自定义控件。然后我想重写 WndProc 以捕获 WM_PASTE 消息,但我注意到没有要重写的 WndProc。对于标准 TextBox,所描述的方法可以正常工作。
有什么建议可以从 ToolStripTextBox 上的剪贴板检测粘贴吗?
WndProc
inToolStripTextBox
似乎遥不可及。出于好奇,我进行了一些搜索,发现了那个答案-https: //stackoverflow.com/a/4688745/168719
如果 usingToolStripControlHost
不是一个选项,对于需要自定义处理 WndProc 的场景,还有其他巧妙的解决方案:
http://bytes.com/topic/c-sharp/answers/279168-toolstriptextbox-右键单击
Nicholas Paldino [.NET/C# MVP]
我只是注意到了。为了解决这个问题,您可以通过调用 TextBox 属性来获取托管的 TextBox。然后,您应该能够创建一个派生自 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 才能更改它托管的控件类型。