2015-09-23 2 views
0

Скажем, мое приложение состоит из Rich Text Box и кнопки. Я хочу, чтобы кнопка включалась, когда пользователи нажимали клавишу в RTB, но не может быть любого из модификаторов.модификатор + другой символ, Win Forms

Я могу справиться с этим в некоторых KeyEvent, таких как PreviewKeyDown, но он не работает, когда я нажимаю модификатор + другой символ, например SHIFT + S, который действителен, потому что результатом является буква S. Есть ли способ отделите мое требование или я должен использовать какой-то другой подход? Я мог бы использовать TextChanged, но есть еще много действий, которые я уже написал, и я бы предпочел сделать это именно так.

Простое объяснение:

private void richTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
     { 
      if (!e.Alt && !e.Control && !e.Shift) 
      { 
       this.button1.Enabled = true; 
        else 
       this.button1.Enabled = false; 
      } 
     } 
+0

Достаточно проверить, есть ли в вашем RichTextBox текст, а затем включить вашу кнопку. поэтому вы можете обрабатывать событие TextChanged и проверять свойство 'TextLength'. –

+0

У моего richtextbox уже есть текст. Я имею в виду, это просто объяснение, мой случай сложнее, мне нужно знать, как его решить, скажем, richtextbox.text = «Что-то», и теперь, когда я нажимаю Shift, он отключен, но когда я нажимаю Shift + char он включен. –

+0

@RezaAgheai Да, я знаю это, поскольку я написал в вопросе. Но в этом конкретном случае я не могу использовать TextChanged, это проблема. –

ответ

2

Поскольку KeyPress событие происходит, когда персонаж, пробел или забой клавиша нажата в то время как элемент управления имеет фокус и клавиши-модификаторы не оказывает никакого влияния на это событие, по-видимому, используя KeyPress может помочь вы.

Но лучше подумать о том, чтобы обработать событие TextChanged и проверить TextLength, так как пользователь может вставить что-то в RichtextBox, и таким образом ни одно из ключевых событий не будет срабатывать.

Смежные вопросы