как заставить многострочное текстовое поле не принимать Enter и Backspace - PullRequest
2 голосов
/ 12 апреля 2011

У меня есть многострочное текстовое поле, которое не должно принимать алфавиты, цифры, новую строку (клавиша ввода) и клавишу Backspace. Короче говоря, textbox.Text не должно быть редактируемым. Но я хочу, чтобы текстовое поле принимало две комбинации клавиш - control и control + R. Один из способов сделать текстовое поле недоступным для редактирования - сделать его доступным только для чтения. Но тогда текстовое поле не будет принимать любое нажатие клавиши вообще. Короче говоря, мои ярлыки (control и control + R) не будут работать (Control + R) только для чтения.

Может ли кто-нибудь помочь в этом отношении. Это все, что я должен сделать.

Одна вещь, которую я мог бы здесь сделать, это не делать текстовое поле доступным только для чтения, а затем ограничивать символы (алфавиты и цифры), которые можно вводить в текстовое поле. С этим кодом:

    private void txtResult_KeyPress(object sender, KeyPressEventArgs e)
    {
        // only modifier keys, escape, enter, backspace etc is accepted now
        e.Handled = !char.IsControl(e.KeyChar);
    }

    private void txtResult_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control == true)
        {
            if (e.KeyCode == Keys.R)
            {
                // do something
            }
            else
            {
                //do something
            }
        }

        if (e.KeyCode == Keys.Escape)
        {
            //do something
        }
    }

С помощью этой техники я могу заставить работать ярлыки (control и control + R). Но проблема этого метода в том, что клавиши Enter и Backspace работают так же, что позволяет редактировать текст текстового поля. Как я могу специально ограничить ввод клавиш Enter и Backspace из текстового поля, но разрешить Control и Escape ??

Ответы [ 3 ]

2 голосов
/ 12 апреля 2011

ты пробовал SuppressKeyPress = true?

private void textBox2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control == true)
            {
                if (e.KeyCode == Keys.R)
                {
                    // do something
                }
                else
                {
                    //do something
                }
            }
            else
                e.SuppressKeyPress = true;


        }
1 голос
/ 12 апреля 2011

Поскольку вы обрабатываете ключи в обработчике событий KeyDown, почему бы вашему обработчику KeyPress не возвращать обработку всех нажатий клавиш?

Так что просто установите e.Handled = true, несмотря ни на что.Я верю, что backspace и enter будут также интерпретироваться как управляющие символы.

0 голосов
/ 12 апреля 2011

Клавиши Enter и Backspace не будут работать, если для текстового поля установлено значение ReadOnly, как вы предлагали в начале своего вопроса.Убедитесь, что для свойства все еще установлено значение true.Вы можете установить его в окне «Свойства» или с помощью кода, подобного следующему:

myTextBox.ReadOnly = true;

Затем вам нужно обработать событие KeyDown для элемента управления textbox и посмотреть, какие клавиши вы используетеВы заинтересованы в этом. Примерно так:

private void myTextBox_KeyDown(object sender, KeyEventArgs e)
{
   if (e.Control)
   {
      if (e.KeyCode == Keys.R)
      {
         MessageBox.Show("Pressed Ctrl+R");
      }
      else
      {
         MessageBox.Show("Pressed Ctrl");
      }
   }
   else if (e.KeyCode == Keys.Escape)
   {
      MessageBox.Show("Pressed Esc");
   }
}

Это работает точно так, как ожидается, если текстовое поле установлено только для чтения.Другие ключи не распознаются, и пользователь не может изменить или изменить любой текст в текстовом поле.Вам не нужно подавлять нажатия клавиш, так как элемент управления уже делает это, когда вы устанавливаете его только для чтения.Вам также не нужно обрабатывать события KeyDown и KeyPress.KeyPress все равно не будет работать для вас, поскольку не позволяет обрабатывать управляющие символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...