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可以在我的情况下正常运行,并停止事件处理程序引发异常。