c# - quitar - evitar borrar validación de datos en excel al pegar datos copiados
cómo deshabilitar copiar, pegar y eliminar funciones en un cuadro de texto usando C# (6)
¿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.
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();
}
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);
}
}
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:
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);
}
}
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.
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();
}