如何防止用户在 C# 应用程序中从 RichTextBox 复制文本?

问题描述 投票:0回答:5

是否可以以某种方式阻止最终用户在 C# 应用程序中从

RichTextBox
复制文本?也许像在
RichTextBox
上方添加一个透明面板?

c# copy richtextbox
5个回答
4
投票

http://www.daniweb.com/software-development/csharp/threads/345506

回复:禁用 Richtextbox 控件的复制和粘贴控件 两个步骤 按照以下步骤禁用文本框中的复制粘贴功能,

1) 要停止右键单击复制/粘贴,请禁用默认菜单并 将文本框与没有菜单的空上下文菜单相关联 项目。

2)要停止快捷键,您需要覆盖 ProcessCmdKey 方法:

C# 语法(切换纯文本)

private const Keys CopyKey = Keys.Control | Keys.C;
private const Keys PasteKey = Keys.Control | Keys.V;

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if((keyData == CopyKey) || (keyData == PasteKey)){
        return true;
    } else {
      return base.ProcessCmdKey(ref msg, keyData);
    }
}

2
投票

您需要对富编辑框控件进行子类化,覆盖WM_COPY消息,并且在收到它时不执行任何操作。 (不要委托给 DefWindowProc。)

您还必须对 WM_CUT 执行相同的操作。

而且任何人都可以使用 Spy++ 等实用程序获取文本。


1
投票

一种方法是访问 Clipbord 对象,然后您可以操作 Clipbord 的内容。

清除剪贴板的方法是:Clipboard.Clear Method


1
投票

你可以这样做(我认为):

//Stick this in the KeyDown event of your RichtextBox
    if (e.Control && e.KeyCode == Keys.C) {
        e.SuppressKeyPress = true;
    }

0
投票

另一个非常优雅的工作选项(这也阻止了上下文菜单操作)。

XAML:

<RichTextBox CommandManager.PreviewExecuted="richTextBox_PreviewExecuted"/>

隐藏代码:

private void richTextBox_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
{
    if (e.Command == ApplicationCommands.Copy ||
        e.Command == ApplicationCommands.Cut  ||
        e.Command == ApplicationCommands.Paste)
    {
        e.Handled = true;
    }
}

(来源:https://programmingistheway.wordpress.com/2016/09/07/disable-wpf-textbox-cut-copy-and-paste/

此外,如果感兴趣,您可以将“剪切”命令“转换”为“复制”命令(以便允许复制但避免修改):

private void richTextBox_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
{
    if (e.Command == ApplicationCommands.Paste)
    {
        e.Handled = true;
    }
    else if (e.Command == ApplicationCommands.Cut)
    {
        ApplicationCommands.Copy.Execute(e.Parameter, (IInputElement)sender);
        e.Handled = true;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.