cómo deshabilitar copiar, pegar y eliminar funciones en un cuadro de texto usando C #

¿Alguien puede sugerir cómo manejar los eventos Cortar, Copiar y Pegar en un Cuadro de texto en WinForms usando C #?

En Winforms, la forma más fácil de desactivar las funciones de cortar, copiar y pegar en un cuadro de texto es establecer la propiedad ShortcutsEnabled en false.

Tendría que crear una subclase en el cuadro de texto y luego anular el método WndProc para interceptar los mensajes de Windows antes que el control.

Aquí hay un ejemplo que ilustra un TextBox que intercepta el mensaje WM_PASTE.

Y como referencia, aquí está la definición de las constantes del mensaje:

  • WM_PASTE
  • WM_COPY
  • WM_CUT

Simplemente ignoraría el mensaje entrante, así:

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); } } 

Supongamos que tiene un TextBox llamado textbox1 . Parece que quiere deshabilitar la funcionalidad de cortar, copiar y pegar de un TextBox.

Prueba este fragmento rápido y sucio de prueba de concepto:

 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 ; } 

Hola, encontré una manera de cómo obtener la posición actual del cursor en lugar de manejar cortar, copiar y pegar evento en un cuadro de texto llamado TextBox1.Aquí en la figura anterior estoy manteniendo la copia de seguridad de la posición actual del cursor y después de recortar los espacios adicionales desde el inicio y desde la posición final estoy reasignando la posición actual del cursor.

Gracias a todos los que me ayudaron a solucionar este problema.

Para evitar que los usuarios copien / peguen con el teclado, establezca la propiedad ShortcutsEnabled en false. Para evitar que los usuarios copien / peguen desde el menú contextual, establezca la propiedad ContextMenu en el nuevo ContextMenu ().

 if (copyPasteEnabled) { textBox1.ShortcutsEnabled = true; textBox1.ContextMenu = null; } else { textBox1.ShortcutsEnabled = false; textBox1.ContextMenu = new ContextMenu(); }