gpt4 book ai didi

c# - 文本框的 wpf LostFocus 事件

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:06 27 4
gpt4 key购买 nike

这是我的xaml结构

<StackPanel>
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="A"
LostFocus="text_LostFocus"/>
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="B"
LostFocus="text_LostFocus"/>
</StackPanel>

=> 这个结构可以多循环。如:

<StackPanel>
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="A"
LostFocus="text_LostFocus"/>
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="B"
LostFocus="text_LostFocus"/>
</StackPanel>
<StackPanel>
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="A"
LostFocus="text_LostFocus"/>
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="B"
LostFocus="text_LostFocus"/>
</StackPanel>

在.cs文件中,我定义事件失去焦点如下

private void text_LostFocus(object sender, RoutedEventArgs e)
{
TextBox textbox = ((TextBox)sender);
if (textbox.Text.Trim().Length == 0)
{
System.Windows.Forms.DialogResult result1 = System.Windows.Forms.MessageBox.Show("Empty string!", "Warning",
System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
textbox.Dispatcher.BeginInvoke((Action)(() => { textbox.Focus(); }));
return;
}
textbox.ScrollToHome();
}

问题:如果有 >= 2 个值为空 ("") 的文本框。

  1. 我点击第一个空白文本框 => 我没有输入任何字符。
  2. 然后单击第二个空文本框。

==> 程序总是显示消息框 => 如果我点击确定按钮,它会显示另一个。它永远发生。我无法关闭程序。

问题:如果我有 >= 2 个空文本框并且我按照上面的问题做同样的事情。如何更改函数 text_LostFocus 来解决问题???

默认:

  • 这些文本框的值始终为空(默认)

  • 必须使用 BeginInvoke => 因为我希望当用户点击文本框时,用户必须至少输入一个字符。

最佳答案

如果我是你,我不会使用 MessageBox。WPF 有一个非常好的“绑定(bind)验证框架”(获取一个很好的教程look here)。否则我会在每个文本框附近创建一个“警告”标签:

<StackPanel>
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="A"
LostFocus="text_LostFocus"/>
<TextBlock Name="AWarning" Foreground="Red" />
<m:TextBoxWithEllipsis IsEllipsisEnabled="True"
Name="B"
LostFocus="text_LostFocus"/>
<TextBlock Name="BWarning" Foreground="Red" />
</StackPanel>

然后在代码隐藏中:

private void text_LostFocus(object sender, RoutedEventArgs e)
{
TextBox textBox = ((TextBox)sender);
TextBlock textBlock = FindName(String.Concat(textBox.Name, "Warning")) as TextBlock;
textBlock.Text = String.IsNullOrWhiteSpace(textBox.Text) ? "Empty string!" : String.Empty;
}

关于c# - 文本框的 wpf LostFocus 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27820278/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com