检测ToolStripTextBox(C#)中剪贴板的粘贴

检测ToolStripTextBox(C#)中剪贴板的粘贴,c#,clipboard,paste,wndproc,C#,Clipboard,Paste,Wndproc,我需要检测用户是否将剪贴板中的文本粘贴到ToolStripTextBox中。因此,我创建了一个从ToolStripTextBox继承的自定义控件。然后我想覆盖WndProc以捕获WM_粘贴消息,但我注意到并没有要覆盖的WndProc。对于标准文本框,所描述的方法可以很好地工作 有没有关于如何在ToolStripTextBox上检测剪贴板粘贴的建议?如果您在Windows[Windows窗体/WPF]中,可以使用剪贴板检测数据 if (Clipboard.GetDataObject().GetDa

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


有没有关于如何在ToolStripTextBox上检测剪贴板粘贴的建议?

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

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

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

            }

(经过编辑以包含WPF)

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


因此,您需要从ToolStripControlHost派生MyToolStripTextBox,以便能够更改它所承载的控件的类型。
ToolStripTextBox
中的
WndProc
似乎无法触及。出于好奇,我搜索了一下,找到了答案-

如果使用
ToolStripControlHost
不是一个选项,那么对于需要自定义WndProc处理的场景,还有其他聪明的解决方案:

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

我只是注意到了。为了避开这个问题,你可以 通过调用TextBox属性托管TextBox。那么,你应该 能够创建从NativeWindow派生的类,该类重写 WndProc方法忽略上下文菜单消息[或截获WM_粘贴,显然…] 获取textbox属性时,获取句柄,并将句柄分配给重写的NativeWindow类


您是否考虑过创建一个继承标准TextBox的自定义控件,并从ToolStripTextBox实现您想要的功能?来源:我在这里借用了我的应用程序的代码:只是想澄清一下:应用程序本身不必是WinForm应用程序,它可以是WPF或其他(控制台等)<代码>剪贴板恰好位于WinForms命名空间中。但您仍然可以在所有类型的应用程序中很好地使用它。只需添加对
System.Windows.Forms
的引用即可。同样,您可以从C#应用程序中使用Microsoft VB库。是的,我使用Windows.Forms。我知道如何从剪贴板中检索文本,但我真正想要的是检测用户何时尝试从剪贴板粘贴文本。好的,我明白了。。但是,当用户尝试粘贴时,程序将进入if块。。当然,如果(…GetDataPresent()…)是你想要的吗?他想知道把你的代码放在哪里。在什么情况下,此代码需要像预期的那样工作?text ToolStripTextBox的更改?非常感谢,这就是解决方案!工作完美,正是我所寻找的!谢谢:)当然全部归功于原创作者。