![](/img/trans.png)
[英]how to disable copy/paste in textbox in windows phone using c#?
[英]how to disable copy, Paste and delete features on a textbox using C#
有人可以建议如何使用 C# 在 WinForms 中的文本框中处理剪切、复制和粘贴事件吗?
在 WinForms 中,禁用文本框上的剪切、复制和粘贴功能的最简单方法是将 ShortcutsEnabled 属性设置为 false。
您必须对文本框进行子类化,然后覆盖 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);
}
}
假设您有一个名为textbox1
的 TextBox。 听起来您想禁用 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);
}
}
为防止用户使用键盘进行复制/粘贴,请将ShortcutsEnabled属性设置为 false。 为了防止用户从上下文菜单中复制/粘贴,将ContextMenu属性设置为 new ContextMenu()。
if (copyPasteEnabled) {
textBox1.ShortcutsEnabled = true;
textBox1.ContextMenu = null;
} else {
textBox1.ShortcutsEnabled = false;
textBox1.ContextMenu = new ContextMenu();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true;
}
if (e.Control == true)
{
switch (e.KeyCode)
{
case Keys.C:
case Keys.P:
case Keys.X:
e.Handled = true;
textBox1.SelectionLength = 0;
break;
}
}
}
private void textBox1_Enter(object sender, EventArgs e)
{
System.Windows.Forms.Clipboard.Clear();
}
int cusorposition = m_TextBox1.SelectionStart;
if (TextBox1.Text[0] == ' ')
{
//Trim Spaces at beginning.
m_TextBox1.Text = m_TextBox1.Text.TrimStart(' ');
m_TextBox1.Text = m_TextBox1.Text.TrimEnd(' ');
m_TextBox1.SelectionStart = cusorposition ;
}
嗨,我找到了一种如何获取当前光标位置而不是处理名为 TextBox1 的文本框中的剪切、复制和粘贴事件的方法。并从结束位置我重新分配当前光标位置。
感谢所有帮助我解决这个问题的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.