2014-09-28 2 views
-1

Я считаю, что можно запустить код, когда кнопка закрытия нажата в приложении Windows Forms на C#. Его дочерняя форма главного окна. Я хочу сохранить некоторые пользовательские настройки, когда пользователь закрывает окно.Код запуска при закрытии окна

private void fileTypeDialog_FormClosing(Object sender, FormClosingEventArgs e) 
    { 
     int ArraySize = fileTypesData.Items.Count; 
     string[] fileTypesToSaveArray = new string[ArraySize]; 

     for (int i = 0; i < ArraySize; i++) 
     { 
      fileTypesToSaveArray[i] = fileTypesData.Items[i].ToString(); 
     } 
     string fileTypesToSave = String.Join(",", fileTypesToSaveArray); 
     MessageBox.Show(fileTypesToSave.ToString()); 
     Properties.Settings.Default.fileTypes = fileTypesToSave; 
     Properties.Settings.Default.Save(); 
    } 

Я сделал это раньше, чем думаю, но я просто не могу вспомнить, как я это сделал. Можете ли вы, ребята, помочь мне?

+2

С какими проблемами вы столкнулись? – Dmitry

+0

Этот код должен работать ANYTIME, форма закрывается. Чтобы лучше контролировать его, проверьте свойство e.CloseReason. Вы также можете отменить закрытие, если хотите, установив e.Cancel = true; –

+1

Проводятся ли события? Лучше использовать переопределение: OnFormClosing вместо этого, чтобы избежать формы, чтобы слушать свои собственные события. Попробуйте избежать использования MessageBox для отладочного вызова, это может помешать слишком многим вещам. – LarsTech

ответ

2

Ваше мероприятие не подключен вверх. Если вы не создаете событие с дизайнером, то вам необходимо добавить его вручную, как правило, в конструкторе:

public Form1() { 
    InitializeComponent(); 
    this.FormClosing += fileTypeDialog_FormClosing; 
} 

Но форма не должна слушать свои собственные события, так как он имеет доступ к его защищенные методы событий. Поэтому просто наберите «override OnForm» и выберите «OnFormClosing» из intellisense. Ваш блок кода будет выглядеть следующим образом:

protected override void OnFormClosing(FormClosingEventArgs e) { 
    // your code here 

    base.OnFormClosing(e); 
} 

При переопределении метода базового, всегда включает в себя базовый вызов, как показан, если у вас нет особых причин не делать этого.

-1

Попробуйте использовать FormClosed вместо FormClosing, я попробовал и работал очень хорошо для меня :) Надежда помогла вам :)

+0

Пробовал это. Не меняется. По-видимому, это должно работать в соответствии с другими комментариями, поэтому что-то должно быть не так на моей стороне. Что-то, что я пропустил или забыл –

Смежные вопросы