winforms WndProc中未捕获WM_PASTE的CTRL-V

svujldwt  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(161)

我试图在继承的TextEdit中捕获粘贴操作,但CTRL-V没有被捕获。
我有这个

private const int WM_PASTE = 0x0302;

 protected override void WndProc(ref Message message)
 {
     if (message.Msg == WM_PASTE)
     {
         // my code
     }

     base.WndProc(ref message);
 }

字符串
如果我做鼠标右键/粘贴比我把它变成my code
如果我做SHIFT-A,那么我就把它变成my code
但是如果我做CTRL-V,那么我don't就变成了my code
我发现同样的问题与接受的答案here,但它是在VB和当我尝试它不工作。我不知道VB,但像我理解这个答案的代码将只执行CTRL或只是V,这不是我想要的。
我根据这个答案修改后的代码是

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (((Control.ModifierKeys & Keys.Control) == Keys.Control) && (keyData == Keys.V)) 
    {
        // my code
    }

    return base.ProcessCmdKey(ref msg, keyData);
}


但是我从来没有用这个代码到my code
那么WM_PASTE(302)是否还有其他消息需要侦听?
或者什么是正确的方式来捕获所有粘贴事件在我继承的文本框?

c0vxltue

c0vxltue1#

我找到问题所在了。
TextEdit是一个DevExpress TextEdit,似乎如果你放一个RegEx类型的maskedit,它就不再接受Ctrl-V了。
在他们的论坛上,我可以看到这个问题在2018年已经被发现并被修复,但它似乎又回来了。
我现在正在等待他们的支持来帮助我。

相关问题