是否可以以某种方式阻止最终用户在 C# 应用程序中从
RichTextBox
复制文本?也许像在 RichTextBox
上方添加一个透明面板?
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);
}
}
您需要对富编辑框控件进行子类化,覆盖WM_COPY消息,并且在收到它时不执行任何操作。 (不要委托给 DefWindowProc。)
您还必须对 WM_CUT 执行相同的操作。
而且任何人都可以使用 Spy++ 等实用程序获取文本。
一种方法是访问 Clipbord 对象,然后您可以操作 Clipbord 的内容。
清除剪贴板的方法是:Clipboard.Clear Method
你可以这样做(我认为):
//Stick this in the KeyDown event of your RichtextBox
if (e.Control && e.KeyCode == Keys.C) {
e.SuppressKeyPress = true;
}
另一个非常优雅的工作选项(这也阻止了上下文菜单操作)。
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;
}
}