4

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

有什么建议可以从 ToolStripTextBox 上的剪贴板检测粘贴吗?

4

3 回答 3

2

WndProcinToolStripTextBox似乎遥不可及。出于好奇,我进行了一些搜索,发现了那个答案-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 类。

于 2012-08-07T13:33:29.207 回答
0

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

if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
            {

            richTextBox1.Paste();
            MessageBox.Show("You have data in clipboard")

            }

(编辑为包括 WPF)

于 2012-08-07T12:53:35.607 回答
0

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

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

于 2012-08-07T13:31:00.523 回答