Интересно, что может привести к тому, что форма не будет закрыта.Что может привести к тому, что форма не закрывается?
У меня есть большая форма, с несколькими TabControls, DataGridView и многими DataBound-Controls, задействовано не менее 10 BindingSources. (Вот почему я не могу опубликовать свой код здесь, извините).
Теперь у меня есть проблема, что где-то в разработке (просто рефакторинг) форма была закрыта правильно. Когда я нажимаю кнопку Close-Button (Red-Cross-Box), я просматриваю FormClosing и FormClosed, но больше ничего не происходит. VisualStudio2008 с отладкой и остановкой всех ошибок при броске не означает, что что-то пошло не так, форма остается там, где она есть.
Что может привести к такому поведению? Это НЕ, что установлен e.Cancel в FormClosing-Event!
После шаг за шагом сливаясь мои изменения в другую чистую рабочую копию, форма закрывается корректно, но исключение:
ArgumentNullException с сообщением: «Значение не может быть пустым ParameterName:. Компонент». Он забрасывается в Form.Designer.Dispose при вызове base.Dispose (disposing).
Кажется, что-то с DataBinging, любые намеки приветствуются.
Я вложу в StackTrace, это действительно любой элемент управления DataBound, из того, что я понимаю из StackTrace, это TextBox - я не получаю Step Framework Step Stepping, поэтому я не могу понять что TextBox ломается здесь.
bei System.ComponentModel.ReflectPropertyDescriptor.RemoveValueChanged(Object component, EventHandler handler)
bei System.Windows.Forms.BindToObject.CheckBinding()
bei System.Windows.Forms.Binding.CheckBinding()
bei System.Windows.Forms.Binding.SetBindableComponent(IBindableComponent value)
bei System.Windows.Forms.ControlBindingsCollection.ClearCore()
bei System.Windows.Forms.BindingsCollection.Clear()
bei System.Windows.Forms.ControlBindingsCollection.Clear()
bei System.Windows.Forms.Control.ResetBindings()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.Windows.Forms.TextBox.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.Windows.Forms.ContainerControl.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.Windows.Forms.TabControl.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.Windows.Forms.ContainerControl.Dispose(Boolean disposing)
bei System.Windows.Forms.Form.Dispose(Boolean disposing)
bei My.BaseForm.Dispose(Boolean disposing) in BaseForm.Designer.cs:Zeile 30.
bei My.InheritedForm.Dispose(Boolean disposing) in InheritedForm.Designer.cs:Zeile 25.
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Form.WmClose(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Хорошо, он получил, с Рамочного источником активизации рабочего (почему-либо это настолько сложно), я мог понять, что не удалось привязки. Это была привязка данных к свойству объекта, который был нулевым во время выполнения. Спасибо за помощь.
PS: Прошу прощения за то, что я рассердился на меня, но я прямо задал этот вопрос, чтобы не получить эти ответы на весь день. Приятно напомнить мне об этих возможных неудачах, но если я скажу, что это не с этим, не делайте этого, чтобы притворяться.
* «Это НЕ, что e.Cancel в FormClosing-Event установлен!» * Откуда вы знаете? этот e.cancel может быть установлен в родительском объекте. – serhio
Вы проверили, что форма не будет воссоздана, как только она будет закрыта? Я полагаю, что после этого форма функционирует правильно? Нить gui не заблокирована или что-то еще? Это после проверки свойства cancel в закрытии, конечно, поскольку это наиболее распространенный. – Glenn
Нет, он не воссоздается. Я вижу, как очищаются DataGridViews (но строки не удаляются, удаляются только все поля). –