Добавленное событие 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);

Ответы (0 шт):