如何使用C#禁用文本框上的复制,粘贴和删除功能

Sha*_*ain 24 c# textbox winforms

任何人都可以建议如何使用C#处理WinForms文本框中的剪切,复制和粘贴事件?

ben*_*rce 42

在Winforms中,禁用文本框上的剪切,复制和粘贴功能的最简单方法是将ShortcutsEnabled属性设置为false.

  • 对于那些想知道如果 ShortcutsEnabled 属性设置为 false 阻止用户使用右键单击和粘贴的答案的人 - 是的,它可以阻止。 (5认同)
  • @benPearce 但是用户可以使用右键菜单并选择粘贴吗? (2认同)

bry*_*ook 19

您必须子类化文本框,然后重写WndProc方法以在控件执行之前拦截Windows消息.

这是一个示例,说明拦截WM_PASTE消息的TextBox.

作为参考,这里是消息常量的定义:

您只需忽略入站消息,如下所示:

protected override void WndProc(ref Message m)
{
   if (m.Msg == WM_PASTE || m.Msg == WM_COPY || m.Msg == WM_CUT)
   {
      // ignore input if it was from a keyboard shortcut
      // or a Menu command
   }
   else
   {
      // handle the windows message normally
      base.WndProc(ref m);
   }
}
Run Code Online (Sandbox Code Playgroud)


p.c*_*ell 8

假设您有一个名为的TextBox textbox1.听起来你想要禁用TextBox的剪切,复制和粘贴功能.

试试这个快速而肮脏的概念证明片段:

private void Form1_Load(object sender, EventArgs e)
{
    ContextMenu _blankContextMenu = new ContextMenu();
    textBox1.ContextMenu = _blankContextMenu; 
}


private const Keys CopyKeys = Keys.Control | Keys.C;
private const Keys PasteKeys = Keys.Control | Keys.V;

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if ((keyData == CopyKeys) || (keyData == PasteKeys))
    {
        return true;
    }
    else
    {
        return base.ProcessCmdKey(ref msg, keyData);
    }
} 
Run Code Online (Sandbox Code Playgroud)

  • @Cody:这是一个简单的演示.这个问题完全没有关于功能,应用程序,用例等的规模信息.因此,当提问者没有提供真实信息时,关于"为什么策略X而不是策略Y"的问题很难提出并回答. (6认同)