想知道TextBox方法

时间:2013-11-12 21:04:58

标签: c# wpf textbox code-behind lostfocus

我有一个TextBox我希望根据是否输入一个整数来运行几个条件。我的操作是从TextBox所在的窗口的代码隐藏处进行的。

LostFocus事件下,我想执行以下操作:

  • 检查string IsNullOrEmpty

    - 如果是 - 将文本设置为“默认记录”

  • 确认输入的值为Int

    如果不是 - 显示MessageBox(Ok Button),然后将焦点设置回TextBox

**这就是我LostFocus函数的样子:

private void TextBox_LostFocus(object sender, RoutedEventArgs e) //Lost Focus
{
    if (string.IsNullOrEmpty(TextBox.Text))
        TextBox.Text = "Default Record";
    else if (Regex.IsMatch(TextBox.Text, @"^\d+$") == false)
    {
        MessageBox.Show("Illegal character in list.", "Warning!", MessageBoxButton.OK, MessageBoxImage.Warning);
        TextBox.Focus();
    }
}

上述功能可以很好地测试string IsNullOrEmpty,但我遇到了else if条件的问题。当我尝试将焦点重置回TextBox时,我得到了MessageBoxes的无限循环。为什么这样,我该如何解决?

更新1:

这些是TextBox上的其他事件处理程序:

//State of View at startup
private void Document_Loaded(object sender, RoutedEventArgs e)
{
    //This is run because I need the TextBox to have focus at window startup
    TextBox.Focusable = true;
    TextBox.Focus();
}

XAML:

<UserControl Loaded="Document_Loaded" ... >

4 个答案:

答案 0 :(得分:1)

  

请勿尝试从Enter,GotFocus,Leave中设置焦点,   LostFocus,Validating或Validated事件处理程序。这样做可能会导致   您的应用程序或操作系统停止响应...

来自MSDN

答案 1 :(得分:0)

  

当我尝试将焦点重置回TextBox时,我得到了无穷无尽的感觉   循环MessageBoxes

这是因为您正在调用焦点到TextBox控件,就在引发事件LostFocus时。当您关闭MessageBox时,TextBox控件获得焦点,但事件LostFocus不断被提​​升,并且,因为满足else条件,您将有一个无限循环的MessageBoxes。

我认为您不应该使用事件LostFocus来检查TextBox的值并再次关注。您是否考虑过活动TextChanged

然后你可以这样做:

private void TextTest_TextChanged(object sender, TextChangedEventArgs e)
{
      Console.WriteLine("Text changed");

      /*  your logic here */   

      TextTest.Focus(); //it could be useless in this case!
}

答案 2 :(得分:0)

跟踪自上次显示消息框后值是否已更改。 仅在您上次显示消息框后值已更改时才显示消息框。

我想是这样的:

private string lastValue = null;
private void TextBox_LostFocus(object sender, RoutedEventArgs e) //Lost Focus
{
    bool valueChanged = ( lastvalue != TextBox.Text );
    lastValue = TextBox.Text;
    if (string.IsNullOrEmpty(TextBox.Text))
        TextBox.Text = "Default Record";
    else if (Regex.IsMatch(TextBox.Text, @"^\d+$") == false && valueChanged )
    {
        MessageBox.Show("Illegal character in list.", "Warning!", MessageBoxButton.OK, MessageBoxImage.Warning);
        TextBox.Focus();
    }
}

答案 3 :(得分:0)

您可能还想查看使用蒙版文本框将输入限制为整数。然后,当用户点击“ok / next / submit”时,你想要进行验证(检查)...无论什么都能完成输入。

http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.mask%28v=vs.90%29.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

相关问题