WPF: вызов TextBox.Clear () из обработчика LostFocus вызывает исключение NullReferenceException при закрытии окна - PullRequest
1 голос
/ 01 октября 2008

Пример ниже имеет два текстовых поля. Второй TextBox имеет обработчик для события LostFocus, который вызывает Clear () для себя. Смена фокуса между двумя текстовыми полями работает нормально; однако, если фокус находится на втором текстовом поле, когда окно закрыто, TextBox.Clear () генерирует исключение NullReferenceException. Это ошибка в WPF? Как я могу легко обнаружить эту ситуацию, чтобы избежать вызова Clear () при закрытии окна?

Редактировать: возможно актуально - окно является основным окном приложения. Тест не является нулевым во время вызова 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, культура = нейтральная, 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

Ответы [ 2 ]

2 голосов
/ 01 октября 2008

Может ли свойство Test быть нулевым к моменту запуска события LostFocus?

Попытка:

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

РЕДАКТИРОВАТЬ: У меня проблемы с воспроизведением исключения NullReferenceException с кодом, который вы разместили. Какую версию .NET вы используете?

1 голос
/ 01 октября 2008

Перехват LostKeyboardFocus вместо LostFocus работает нормально для моей ситуации и останавливает обработчик событий, генерирующий исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...