Добавленное событие FormClosing время от времени пропадает, из-за чего при попытке закрытия формы вываливается исключение
Сразу скажу что код не я писал, мне надо лишь разобраться с проблемой. Не понятно почему так происходит, у меня в дебаге не получалось отловить это, но на других ПК (и не на одном) это вылетает, но не всегда, один раз на 20 запусков где-то, вот полный текст :
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в SrzTools.Forms.FrmSelectStr.FrmSelectStr_FormClosing(Object sender, FormClosingEventArgs e)
Изначально было FormClosed, думал в этом дело, мол освобождаются ресурсы уже, но видимо нет.
Эта форма вызывается в другой форме по нажатию мыши
FrmSelectStr frm = new FrmSelectStr(findParam.LstHead);//вот она вызывается
if (!string.IsNullOrWhiteSpace(frm.Selection)) txtHead.Text = frm.Selection;//это меня тоже смутило немного, ибо
//после закрытия формы идёт обращение к её полю(string Selection), но это работает, если до этого не вылетает исключение
Конструктор формы выглядит так:
public FrmSelectStr(IEnumerable<string> Lst)
{
InitializeComponent();
//загрузка справочника Органов
dsLetter.Tables["letterXML"].Rows.Clear();
LstSel.DataSource = Lst;
for (int j = 0; j < Lst.Count(); j++)
{
dsLetter.Tables["letterXML"].Rows.Add();
LstSel.SelectedIndex = j;
dsLetter.Tables["letterXML"].Rows[j][0] = LstSel.SelectedValue.ToString();
}
Col.Text = "Кол-во:" + dsLetter.Tables["letterXML"].Rows.Count.ToString();
ShowDialog();
}
Событие
private void FrmSelectStr_FormClosing(object sender, FormClosingEventArgs e)
{
try //TryCatch уже я сам написал, чтоб пока люди могли работать
{
PublicData pd = PublicData.getInstance();
SrzTools.Forms.frmDrugiyeOrgany.FindParam findParam = new frmDrugiyeOrgany.FindParam();//здесь мы
//передаём данные в родительскую форму
pd.findParam.LstHead.Clear();
for (int i = 0; i <= dsLetter.Tables["letterXML"].Rows.Count - 1;
i++)
{
string head = dsLetter.Tables["letterXML"].Rows[i]["LETTER1"].ToString();
pd.findParam.LstHead.Add(head);
}
findParam.LstIsp = pd.findParam.LstIsp;
findParam.LstHead = pd.findParam.LstHead;
findParam.LstDirector = pd.findParam.LstDirector;
findParam.SaveToXml<SrzTools.Forms.frmDrugiyeOrgany.FindParam>(PathHelpers.GetFullPathInTempDirectory("FindParam.xml"));
Selection = txtHead1.Text;
}
catch (Exception ex)
{
Classes.Log.Write(ex.GetBaseException().ToString(), 2);
}
}
Добавляется оно в дизайнере автоматом, наверное как положено
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmSelectStr_FormClosing);