1

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

LostFocus活动中,我想做以下事情:

  • 检查是否string IsNullOrEmpty

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

  • 验证输入的值是Int

    如果不是 - 显示 a 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条件问题。当我尝试将焦点重新设置TextBoxMessageBoxes. 为什么会这样,我该如何解决?

更新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();
}

xml:

<UserControl Loaded="Document_Loaded" ... >
4

4 回答 4

1

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

来自MSDN

于 2013-11-12T21:54:54.037 回答
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!
}
于 2013-11-12T21:38:11.077 回答
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();
    }
}
于 2013-11-12T21:40:50.133 回答
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-片段-1

于 2013-11-13T12:29:58.627 回答