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