有人可以建议如何使用C#在WinForms的文本框上处理剪切,复制和粘贴事件吗?
答案 0 :(得分:39)
在Winforms中,禁用文本框上的剪切,复制和粘贴功能的最简单方法是将ShortcutsEnabled属性设置为false。
答案 1 :(得分:18)
您必须继承文本框,然后override the WndProc method以在控件执行之前拦截Windows消息。
Here's an example,用于说明截取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);
}
}
答案 2 :(得分:9)
假设您有一个名为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);
}
}
答案 3 :(得分:1)
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();
}
答案 4 :(得分:0)
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的文本框中处理剪切,复制和粘贴事件。在上面我保留当前光标位置的备份并在修剪额外空格之后我从起始位置和结束位置重新分配当前光标位置。
感谢所有帮助我解决这个问题的人。
答案 5 :(得分:0)
要防止用户使用键盘 ShortcutsEnabled 属性将其复制/粘贴为false。 要阻止用户从上下文菜单中将 ContextMenu 属性复制/粘贴到新的ContextMenu()。
if (copyPasteEnabled) {
textBox1.ShortcutsEnabled = true;
textBox1.ContextMenu = null;
} else {
textBox1.ShortcutsEnabled = false;
textBox1.ContextMenu = new ContextMenu();
}