1

我的代码是:

   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

4 回答 4

4

你可以处理这个PreviewKeyDown事件......你几乎拥有它,你只需要(&) theKeyboard.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");
    }
}
于 2013-11-07T09:21:37.357 回答
3

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

因此,您应该做的不是覆盖击键,而是要触发的实际命令。(您可能想了解 Commands 在 WPF 中的工作原理。)

为此,只需将以下方法添加到您的类中

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

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

于 2013-11-07T09:26:07.167 回答
0

您必须订阅 PreviewKeyDown-Event 并且在处理程序中您必须设置e.Handled = true是否按下了组合键。

于 2013-11-07T09:25:14.653 回答
0

一个richTextbox是用来输入文本的,你可以把它设为只读,那你为什么要防止复制呢?

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

于 2013-11-07T09:23:55.740 回答