Quelqu'un peut-il suggérer comment gérer les événements Couper, Copier et Coller sur une zone de texte dans WinForms en utilisant C #?
Dans Winforms, le moyen le plus simple de désactiver les fonctions de couper, copier et coller sur une zone de texte consiste à définir la propriété ShortcutsEnabled sur false.
Vous devez sous-classer la zone de texte, puis remplacer la méthode WndProc pour intercepter les messages Windows avant le contrôle.
Voici un exemple qui illustre un TextBox qui intercepte le message WM_PASTE.
Et pour référence, voici la définition des constantes de message:
Vous ignorez simplement le message entrant, comme ceci:
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);
}
}
Supposons que vous ayez un TextBox nommé textbox1
. Il semble que vous souhaitiez désactiver la fonctionnalité couper, copier et coller d'une zone de texte.
Essayez cet extrait de preuve de concept rapide et sale:
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();
}
Pour empêcher les utilisateurs de copier/coller à l'aide du clavier, définissez la propriété ShortcutsEnabled sur false. Pour empêcher les utilisateurs de copier/coller à partir du menu contextuel, définissez la propriété ContextMen sur le nouveau ContextMenu ().
if (copyPasteEnabled) {
textBox1.ShortcutsEnabled = true;
textBox1.ContextMenu = null;
} else {
textBox1.ShortcutsEnabled = false;
textBox1.ContextMenu = new ContextMenu();
}