web-dev-qa-db-fra.com

comment désactiver les fonctionnalités de copie, de collage et de suppression sur une zone de texte à l'aide de C #

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 #?

25
SharpUrBrain

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.

44
benPearce

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

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);
    }
} 
8
p.campbell
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();
}
1
M. Kashif Iqbal

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