如何禁用复制,使用C#粘贴和删除文本框上的function
任何人都可以build议如何使用C#处理WinForms中的文本框上的剪切,复制和粘贴事件?
在Winforms中,禁用剪切,复制和粘贴文本框function的最简单方法是将ShortcutsEnabled属性设置为false。
您必须inheritance该文本框,然后重写WndProc方法以在控件执行之前截获Windows消息。
下面是一个例子 ,说明截取WM_PASTE消息的TextBox。
而作为参考,这里是消息常量的定义:
- WM_PASTE
- WM_COPY
- WM_CUT
您只需忽略入站消息,如下所示:
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的剪切,复制和粘贴function。
尝试这个快速和肮脏的概念片段的certificate:
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); } }
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 ; }
嗨我find了一种方法如何获得当前的光标位置,而不是处理剪切,复制和粘贴事件在上面的文本框中名为TextBox1.Here我保持当前的光标位置的备份和修剪从起始的额外空间并从结束位置我重新分配当前的光标位置。
感谢所有帮助我解决这个问题的人。
要防止用户使用键盘将ShortcutsEnabled属性复制/粘贴为false。 为了防止用户从上下文菜单中复制/粘贴将ContextMenu属性设置为新的ContextMenu()。
if (copyPasteEnabled) { textBox1.ShortcutsEnabled = true; textBox1.ContextMenu = null; } else { textBox1.ShortcutsEnabled = false; textBox1.ContextMenu = new ContextMenu(); }