代码之家  ›  专栏  ›  技术社区  ›  Dave

wpf:在窗口关闭时,从lostFocus处理程序调用textbox.clear()会导致nullreferenceexception

wpf
  •  1
  • Dave  · 技术社区  · 16 年前

    下面的示例有两个文本框。第二个文本框有一个lostFocus事件的处理程序,它对自己调用clear()。在两个文本框之间更改焦点可以正常工作;但是,如果关闭窗口时焦点在第二个文本框上,则text box.clear()将生成一个nullreferenceexception。这是wpf中的错误吗?我怎样才能很容易地发现这种情况,这样我就可以避免在窗口关闭时调用CULL()?

    编辑:可能相关-窗口是应用程序的主窗口。调用clear()时测试不为空。异常是从调用中的某个地方引发的。

    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,区域性=neutral,publickeytoken=b77a5c561934e089
    • 表示核心,版本=3.0.0.0,区域性=中性,publickeytoken=31bf3856ad364e35
    • 表示框架,版本=3.0.0.0,区域性=中性,publickeytoken=31bf3856ad364e35
    • 系统,版本=2.0.0.0,区域性=中性,publickeytoken=b77a5c561934e089
    • WindowsBase,版本=3.0.0.0,区域性=中性,publickeytoken=31bf3856ad364e35
    2 回复  |  直到 5 年前
        1
  •  2
  •   Jason Anderson    16 年前

    在启动LostFocus事件时,测试属性是否可以为空?

    尝试:

        private void Test_LostFocus(object sender, RoutedEventArgs e)
        {
            if (Test != null)
                Test.Clear();
        }
    

    编辑: 我无法复制您发布的代码的空引用异常。你在使用哪一个版本的.net?

        2
  •  1
  •   dav    16 年前

    钩住lostkeyboardfocus而不是lostfocus对我的情况很好,并停止事件处理程序抛出异常。