【问题标题】:How to detect forward slash and if condition is satisfied check for Enter Key C# WPF如何检测正斜杠以及是否满足条件检查 Enter Key C# WPF
【发布时间】:2017-06-23 21:38:51
【问题描述】:

我正在开发 wpf 应用程序,该应用程序包含主要的 Window.xamlDataGrid,当然还有文章,如果用户选择文章并按“/”,我应该下一步做,而不是让他编辑价格 - 用价格解锁字段,当用户完成后,他应该按回车键,然后我应该检查是否按回车键,以便我可以更新该文章的新价格。

首先,这就是我检查“/”的方式,因为我无法为这个键争取正确的 OEM,而且我担心用户更改时会发生什么他键盘上的语言,所以我就这样做了。

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

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

                    }
             }

        }

在我给用户更改价格的机会后,我应该在 Enter 键上更新文章价格,那么在这个条件 if (e.Text == "/") 被输入后我怎么能检查,因为我看到这里没有 e.Key TextCompositionEventArgs e...

编辑:

也许我可以在这里简单地附加新事件,所以实际上我可能有两个事件,第一个是检测“/”并解锁 txtPrice,另一个是在按下 Enter 时更新它,所以另一个事件可能看起来像这个:

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

谢谢大家 干杯

【问题讨论】:

  • 你有没有在KeyDown事件中设置断点,看看你按下“OEM”正斜杠时的事件键码是什么?
  • @Abion47 我该怎么做?如何检查“OEM”Fwd Slash 的代码?当我捕捉到 if (e.Text == "/") { 我应该在这里检查什么,读取“OEM”代码} 的属性时?
  • @Abion47 检查我的问题的更新。

标签: c# wpf events key enter


【解决方案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...
    }
}

【讨论】:

  • 这正是我所做的,但我遇到了问题,当我用“/”解锁字段时,即使我不想在那里看到该字符,该字符也会写在我的字段中,因为我们在谈论价格,所以我想我应该在某处写 e.Handled=true;即使我对此没有太多经验,老实说,我不知道那是做什么的,如果我这样做,我将被禁止在该未锁定字段中输入任何内容,(只是因为 e.Handled=是的;)..我该如何解决这个伴侣? :/ 我认为你不需要 Window_PreviewKeyDown 事件,你应该将它直接附加到 unl.领域?
  • 仅当 e.Text 等于“/”时,将 TextCompositionEventArgs 的 Handled 属性设置为 true,根据我编辑的答案。
  • 是的,e.Handled 的财产非常有帮助,而且他做到了,所以伙计,你能根据你的经验给我们几句话吗,我需要了解为什么 e.Handled 在里面帮助我们第一个条件,我把它放在我的私人 void Window_PreviewTextInput_1 的开头,之后我无法在我的文本框中输入任何内容..所以请给我们几句话,你的工作非常好,伙计!我真的很感激!
  • 还有一件事,将 KeyDown 事件附加到 TextBox 是否正确,因为这一点是当用户解锁字段时,写一些东西,当用户在他专注于该字段时点击输入应该触发应该更新一些值的事件,那么txtPrice_PreviewKeyDown也可以吗?
  • 请不要在 cmets 中提出其他问题。将 Handled 属性设置为 true 会导致隧道事件被标记为已处理,这基本上意味着其他内置事件处理程序不会处理该事件,例如设置 TextBox 的 Text 属性。请参阅 MSDN 文档中的“处理的概念”部分了解更多信息:msdn.microsoft.com/en-us/library/ms742806%28v=vs.110%29.aspx
猜你喜欢
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 2021-09-06
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
相关资源
最近更新 更多