2017-02-06 29 views
0

Я работаю над приложением wpf, которое содержит основные Window.xaml с DataGrid на нем и в статьях внутри курса, и я должен сделать следующее, если пользователь выбирает статью и нажмите «/», чем я должен позволить ему отредактировать цену - разблокировать поле с ценой, и когда пользователь будет сделан, он должен нажать enter, а после этого я должен проверить, что он введен, чтобы я мог обновить новую цену для этой статьи ,Как обнаружить косую черту и если условие выполнено, проверьте для ввода ключа C# WPF

Прежде всего, так я проверяю: «/» нажал, потому что я не мог бороться с правильными OEM для этого ключа, и я боюсь, что может произойти, когда пользователь меняет язык на своей клавиатуре , поэтому я сделал это на этом пути.

private void Window_PreviewTextInput_1(object sender, TextCompositionEventArgs e) 
     { 
      if (e.Text == "/") 
      { 

        if (globalTemp != null) 
        { 
         txtPrice.IsEnabled = true; 

        } 
      } 

     } 

После Даю Oportunity для пользователя, чтобы изменить цену, я должен обновить цену статьи на клавишу ввода, так как я мог проверить после этого условия if (e.Text == "/") будет ввести также щелкнул, потому что, как я увидел, что нет в этом нет e.KeyTextCompositionEventArgs e ...

EDIT:

может быть, я мог бы просто прикрепить новое событие здесь, так что на самом деле я мог бы иметь два события, сначала один, чтобы обнаружить «/» и разблокировать txtPrice, и еще один в обновите его, если нажата клавиша, другое событие может выглядеть следующим образом:

private void txtPrice_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 
    { 
    // UPDATE PRICE HERE 
    } 
} 

спасибо ребята Приветствие

+0

ли вы положить точка останова в событии KeyDown и посмотреть, что было в ключевом коде события, когда вы нажимаете «косую черту» OEM? – Abion47

+0

@ Abion47 как я мог это сделать? как я могу проверить код «OEM» Fwd Slash? когда я поймаю if (e.Text == "/") {что я должен здесь читать, для какого свойства читать «OEM» CODE}? –

+0

@ Abion47 проверьте обновление моего вопроса. –

ответ

1

PreviewKeyDown Берите событие для обнаружения ENTER нажатия клавиш и PreviewTextInput события для обнаружения «/».

В конце концов, ENTER не является символом, а «/» не является ключом, поэтому имеет смысл обрабатывать оба этих события отдельно.

Если вы хотите, чтобы обнаружить комбинированный ENTER комбинацию + «/» ключ можно использовать логическое поле, которое отслеживает ли была нажата перед ENTER была нажата «/»:

private bool _slash = false; 
private void Window_PreviewTextInput_1(object sender, TextCompositionEventArgs e) 
{ 
    if (e.Text == "/") 
    { 
     _slash = true; 
     e.Handled = true; 
     //... 
    } 
    else 
    { 
     _slash = false; 
    } 
} 

private void Window_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == System.Windows.Input.Key.Enter && _slash) 
    { 
     // "/" + ENTER was pressed... 
    } 
} 
+0

Это точно, что я сделал, но я столкнулся с проблемой, когда я разблокирую поле с помощью «/», этот символ также написан на моем поле, даже если я не хочу его видеть, потому что мы говорим о цене, поэтому я думаю, что я должен написать где-то там e.Handled = true; даже если у меня нет большого опыта с этим, и, честно говоря, я не знаю, что это делает, и если я это сделаю, я буду неспособен ввести что-либо в этом разблокированном поле (просто из-за этого e.Handled = true;) .. как я могу решить эту проблему? :/и я думаю, что вам не нужно событие Window_PreviewKeyDown, вы должны прикрепить его непосредственно к un. поле? –

+0

Установите для свойства TextCompositionEventArgs значение Handled значение true, только если e.Text равно "/" согласно моему отредактированному ответу. – mm8

+0

Да, это свойство e.Handled очень полезно, и он сделал что-то, так что приятель вы можете дать нам несколько слов об этом из вашего опыта, мне нужно понять, почему e.Handled помог нам, когда он был в первом состоянии, я надел его я начинаю вносить свой личный void Window_PreviewTextInput_1, и после этого я не мог ничего вводить в своем текстовом поле .. так что приятель, пожалуйста, дайте нам несколько слов об этом, ваша работа очень приятная помощница! И я действительно ценю это! –