WPF:窗口关闭时,从LostFocus处理程序调用TextBox.Clear()会导致NullReferenceException
时间:2020-03-06 14:57:40 来源:igfitidea点击:
下面的示例有两个TextBoxes。第二个TextBox具有一个LostFocus事件的处理程序,该事件自己调用Clear()。在两个文本框之间更改焦点效果很好;但是,如果在关闭窗口时将焦点放在第二个文本框上,则TextBox.Clear()会生成NullReferenceException。这是WPF中的错误吗?如何轻松检测到这种情况,从而避免在窗口关闭时避免调用Clear()?
编辑:可能相关窗口是应用程序的主窗口。在调用Clear()时,测试不为null。异常是从调用中的某个地方引发的。
谢谢,
戴夫
using System.Windows;
namespace TextBoxClear
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Test_LostFocus(object sender, RoutedEventArgs e)
{
Test.Clear();
}
}
}
<Window x:Class="TextBoxClear.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<TextBox />
<TextBox LostFocus="Test_LostFocus" Name="Test" />
</StackPanel>
</Window>
程序集参考:
- mscorlib,版本= 2.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089
- PresentationCore,版本= 3.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35
- PresentationFramework,版本= 3.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35
- 系统,版本= 2.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089
- WindowsBase,版本= 3.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35
解决方案
触发LostFocus事件时,Test属性是否可以为null?
尝试:
private void Test_LostFocus(object sender, RoutedEventArgs e)
{
if (Test != null)
Test.Clear();
}
编辑:我在用我们发布的代码重现NullReferenceException时遇到问题。我们正在使用哪个版本的.NET?
挂钩LostKeyboardFocus而不是LostFocus可以在我的情况下正常运行,并停止事件处理程序引发异常。

