come disabilitare la copia, incollare ed eliminare funzionalità su una casella di testo usando C #

Qualcuno può suggerire come gestire gli eventi Taglia, Copia e Incolla su una casella di testo in WinForms usando C #?

In Winforms il modo più semplice per disabilitare le funzionalità di taglia, copia e incolla su una casella di testo è impostare la proprietà ShortcutsEnabled su false.

Dovresti creare una sottoclass della casella di testo e quindi eseguire l’override del metodo WndProc per intercettare i messaggi di Windows prima del controllo.

Ecco un esempio che illustra un TextBox che intercetta il messaggio WM_PASTE.

E per riferimento, ecco la definizione delle costanti del messaggio:

  • WM_PASTE
  • WM_COPY
  • WM_CUT

Dovresti semplicemente ignorare il messaggio in arrivo, in questo modo:

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

Supponiamo di avere un TextBox denominato textbox1 . Sembra che tu voglia disabilitare la funzionalità taglia, copia e incolla di un TextBox.

Prova questo rapido e sporco esempio di frammento di concetto:

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

Ciao, ho trovato un modo per ottenere la posizione corrente del cursore invece di gestire l’evento di taglio, copia e incolla in una casella di testo denominata TextBox1. Qui sopra sto mantenendo il backup della posizione corrente del cursore e dopo aver ritagliato gli spazi aggiuntivi dall’avvio e dalla posizione finale sto riassegnando la posizione corrente del cursore.

Grazie a tutti coloro che mi hanno aiutato a risolvere questo problema.

Per impedire agli utenti di copiare / incollare usando la tastiera, impostare la proprietà ShortcutsEnabled su false. Per impedire agli utenti di copiare / incollare dal menu contestuale, impostare la proprietà ContextMenu su new ContextMenu ().

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