如何在wpf中的richtextbox中禁用ctrl + A和ctrl + c?

时间:2013-11-07 09:14:46

标签: c# wpf richtextbox

我的代码是:

   private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if ((e.Key==Key.LeftCtrl && e.Key==Key.C) || (e.Key==Key.RightCtrl && e.Key==Key.C))
        {
            MessageBox.Show("Copy not allowed !");
            e.Handled = true;

        }
    }

或,another way,我试过的是:

    private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if ((e.Key==Key.C) && (Keyboard.Modifiers==ModifierKeys.Control))
        {
            MessageBox.Show("Copy not allowed !");
            e.Handled = true;
        }


    }

但他们不行!

请不要告诉我设置Focusable="False"IsHitTestVisible="False"

因为在那之后,我无法使用滚动条!

请帮忙。 感谢。

4 个答案:

答案 0 :(得分:3)

你可以处理PreviewKeyDown事件...你几乎拥有它,你只需要(&)Keyboard.Modifiers因为它可能包含的不仅仅是ModifierKeys.Control

private void PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.C && (Keyboard.Modifiers & ModifierKeys.Control) == 
        ModifierKeys.Control)
    {
       MessageBox.Show("CTRL + C was pressed");
    }
}

答案 1 :(得分:3)

我认为你的问题实际上并不是如何禁用ctrl + A和ctrl + C,只是因为你不希望用户这样做,而是为了防止用户复制文本框的内容。问题是,Ctrl + A Ctrl + C不是复制数据的唯一方法。用户可以选择文本,然后右键单击。

那么你应该做的就是不要覆盖击键,而是要触发的实际命令。 (您可能想要了解命令如何在WPF中工作。)

为此,只需将以下方法添加到您的班级

即可
private void CancelCopyCommand(object sender, DataObjectEventArgs e)
{
    MessageBox.Show("Copy not allowed !");
    e.CancelCommand();
}

在构造函数中,注册命令如下:     DataObject.AddCopyingHandler(richTextBox1,CancelCopyCommand);

答案 2 :(得分:0)

一个richTextbox用于输入Text,你可以将它设为readonly,那你为什么要阻止复制呢?

尝试使用图像以防止复制或禁用对焦/选择。如果用户选择“文本”,则销毁选择。

答案 3 :(得分:0)

您必须订阅PreviewKeyDown-Event,如果按下了Key-Combination,则必须在Handler中设置e.Handled = true