Подтвердить что ты не робот

Как отключить копирование, Вставить и удалить функции в текстовом поле с помощью С#

Кто-нибудь может предложить, как обрабатывать события Cut, Copy и Paste в текстовом поле в WinForms с помощью С#?

4b9b3361

Ответ 1

В Winforms самый простой способ отключить функции вырезания, копирования и вставки в текстовом поле - установить для свойства ShortcutsEnabled значение false.

Ответ 2

Вам нужно будет подклассифицировать текстовое поле, а затем переопределить метод WndProc, чтобы перехватывать сообщения Windows до того, как это сделает элемент управления.

Вот пример, который иллюстрирует TextBox, который перехватывает сообщение WM_PASTE.

И для справки, здесь определение констант сообщения:

Вы просто игнорируете входящее сообщение, например:

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

Ответ 3

Предположим, что у вас есть TextBox с именем textbox1. Похоже, вы хотите отключить функцию вырезания, копирования и вставки TextBox.

Попробуйте это быстрое и грязное доказательство фрагмента концепции:

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

Ответ 4

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

Ответ 5

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

Привет, я нашел способ, как получить текущую позицию курсора вместо обработки вырезания, копирования и вставки в текстовом поле с именем TextBox1.Here в приведенном выше я сохраняю резервную копию текущей позиции курсора и после обрезки лишних пробелов из начального и конечного положения я переназначаю текущую позицию курсора.

Спасибо всем, кто помог мне решить эту проблему.

Ответ 6

Чтобы пользователи не копировали/вставляли с помощью набора клавиатуры ShortcutsEnabled значение false. Чтобы пользователи не могли копировать/вставлять из контекстного меню, установите свойство ContextMenu в новый ContextMenu().

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