Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > TextBox + Enter


Автор: Breezy 3.12.2006, 13:11
Добрый день форумчане.

Возникла такая проблемма: Хочу по нажатию "Enter" обрабатывать содержимое TextBox. Пока додумался обрабатывать нажатие клавиш... Но при этом при нажатии "Enter" возникает весьма не мелодичный звук. Можно ли избавиться от него?

Может есть другой способ как это сделать?

Автор: thomas 3.12.2006, 13:28
Цитата

Пока додумался обрабатывать нажатие клавиш...



Breezy,   и что сие означает?

Для обработки нажатия Enter нужно просто задать обработчик KeyPress для твоего TextBox-а и написать там условие:

Код

if e.KeyChar = vbCr then
       твой код
end if


А вообще недавно подобное обсуждалось. Неплохо бы юзать поиск по сайту.  smile 

Автор: DarkDragon 3.12.2006, 16:31
Цитата(Breezy @  3.12.2006,  13:11 Найти цитируемый пост)
Но при этом при нажатии "Enter" возникает весьма не мелодичный звук. Можно ли избавиться от него?

Проблема в том, что при установки Multiline = false, заприщается клавиша [Enter], чей символ, превращается в 13 + 10, т. е. CrLF (возврат каретки, новая строка, возможно только 10 символ!), и поэтому возникает такой звук(мелкософту спасибо). Вообщем ставишь мултилайн на действительно, при этом нужно добавить KeyPress событие.

Вот код:

Код

// Устанавливаем Multiline
txtbox.Multiline = true;

//   Обработчик события
    private void txtbox_keypress (object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == ControlChars.Cr)
        {
            // ТВОЙ КОД //
            e.Handle = true; // Это заблакирует нажатие Enter, и не вставит символы в содиржимое txtbox.
        }
    }

//Чтобы установить этот обработчик используй соедующий код:
    txtbox.KeyPress += new keyPressEventHandler (txtbox_keypress); // В методе InitalizeComponents или в конструкторе формы.


Все. Теперь нету ни звука, ни символа переноса строки.

Автор: ivashkanet 3.12.2006, 17:12
DarkDragon, точно, молодчина. А я-то думаю, какой такой звук  smile 
Эта тема уже поднималась, но нормального ответа я не увидел  smile 

Явный +1

Автор: Breezy 3.12.2006, 22:17
DarkDragon

Проверил... Способ не без глюков ) Contrl+Enter... и не все становиться гладким (

Автор: Piphon 3.12.2006, 22:53
Лучше в событие KeyDown.

Код

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
  If e.KeyCode = Keys.Enter Then
    e.SuppressKeyPress = True
  End If
End Sub

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
  If e.KeyCode = Keys.Enter Then
    ' Твой код
  End If
End Sub

Автор: DarkDragon 4.12.2006, 10:02
Цитата(Piphon @  3.12.2006,  22:53 Найти цитируемый пост)
    e.SuppressKeyPress = True

В 2003 версии такого параметра нет. Это уже в 2005.

Цитата(Piphon @  3.12.2006,  22:53 Найти цитируемый пост)
Лучше в событие KeyDown.

Почему?

Цитата(Breezy @  3.12.2006,  22:17 Найти цитируемый пост)
Проверил... Способ не без глюков ) Contrl+Enter... и не все становиться гладким ( 

Почему это? smile  Все безглюков, если умеешь этим пользоваться!

Код

  if (e.KeyChar == 10) // Код возвращаемый при нажатии Ctrl + Enter
  {
    // ВСЕ ТО ЧТО БЫЛО В МОЕМ ПРИМЕРЕ.
  }

// Для того чтобы проверить какое значение пресылается от KeyPress, делай так:
  Debug.WriteLine (Convert.ToInt32 (e.KeyChar).ToString()); // И смотри какое значение(в Output окне).


Еще при использовании моего примера можешь нетрогать Multiline, он тама не играет значения.

Автор: Breezy 4.12.2006, 10:24
DarkDragon
Я имелл в виду, что с мултилайном ещё надо и Copy/Past обрубать...

Автор: Piphon 4.12.2006, 10:27
Цитата(DarkDragon @  4.12.2006,  12:02 Найти цитируемый пост)
Цитата(Piphon @  3.12.2006,  22:53 )
Лучше в событие KeyDown.

Почему?

KeyEventArgs куда более распространеный свойствами, чем KeyPressEventArgs. Хотя обработка нажатия клавиши разбивается на два события.
А KeyPress для обработки текстовых клавиш хорош, а нам надо обрабатывать ещё и спец. клавиши, так что я уж лучше буду знать где у меня Ctrl + Enter, чем буду вспоминать какойже символ вырабатывает нажатие этих клавиш. Нам ведь не надо стократное нажатие клавиш, только одно...

Цитата(DarkDragon @  4.12.2006,  12:02 Найти цитируемый пост)
В 2003 версии такого параметра нет. Это уже в 2005.

Ну он не указал версию ни студии, ни Framework'а.

Автор: DarkDragon 4.12.2006, 10:48
Цитата(Breezy @  4.12.2006,  10:24 Найти цитируемый пост)
DarkDragon
Я имелл в виду, что с мултилайном ещё надо и Copy/Past обрубать... 


Цитата(DarkDragon @  4.12.2006,  10:02 Найти цитируемый пост)
Еще при использовании моего примера можешь нетрогать Multiline, он тама не играет значения.


Автор: okaton 18.9.2007, 17:48
Думаю многим пригодиться.
/Для того чтобы убрать звук при нажатии Enter в textBox  в обработчике KeyPress (textBox) написать e.Handled = true
Звук исчезнет!

Автор: iad 18.9.2007, 18:45
Цитата(okaton @  18.9.2007,  18:48 Найти цитируемый пост)
в textBox  в обработчике KeyPress (textBox) написать e.Handled = true
на каждый текстбокс -жесть

Form1.KeyPreview=true;textBox1.Multiline=false;
Код

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Enter:
                    e.SuppressKeyPress = true;
                    System.Diagnostics.Debug.WriteLine(this.textBox1.Text);
                    System.Diagnostics.Debug.WriteLine(this.textBox2.Text);
                    System.Diagnostics.Debug.WriteLine(this.textBox*.Text);
                    break;
                default:
                    return;
            }
        }


Автор: Azzdorf 20.1.2008, 22:36
Цитата(DarkDragon @ 4.12.2006,  10:48)
Цитата(DarkDragon @  4.12.2006,  10:02 Найти цитируемый пост)
Еще при использовании моего примера можешь нетрогать Multiline, он тама не играет значения.

Он тама играет значение, если роль идет о PasswordChar, так как при Multiline = true; PasswordChar всегда становиться пустым символом = '\0', ну это так кто столкнеться с ввидением пароля клавишей Enter smile 

DarkDragon - молодчина, классный пример smile 

Автор: zmaximka 7.7.2009, 15:17
У моего ToolStripTextBox (TextBox на панели) нет свойства multiline! (( Как же мне убрать это звук при нажатии на энтер? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)