2014-09-28 3 views
-1

C#의 Windows Forms 응용 프로그램에서 닫기 버튼을 누르면 코드를 실행할 수 있다고 생각합니다. 메인 윈도우의 자식 폼. 사용자가 창을 닫을 때 일부 사용자 설정을 저장하려고합니다.윈도우가 닫힐 때 코드 실행

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

해당 코드는 양식이 닫힐 때마다 작동해야합니다. 더 잘 제어하려면 e.CloseReason 특성을 테스트하십시오. e.Cancel = true로 설정하여 원하는 경우 닫기를 취소 할 수도 있습니다. –

+1

이벤트가 유선입니까? 폼을 회피하여 자체 이벤트를 수신하지 않으려면 대신 OnFormClosing을 사용하는 것이 좋습니다. 디버깅 호출을 위해 MessageBox를 사용하지 마십시오. 너무 많은 작업을 방해 할 수 있습니다. – LarsTech

답변

2

:) 도움이 대신 FormClosing의 FormClosed 사용할 수 있습니다. 당신은 디자이너와 이벤트를 생성하지 않는 경우에, 당신은 일반적으로 생성자에서 수동으로 추가해야합니다

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

그러나 한 형태가에 대한 액세스 권한을 가지고 있기 때문에 자신의 이벤트를 수신 할 필요가 없습니다 보호 된 이벤트 메소드 따라서 간단히 "OverForm Onride"를 입력하고 Intellisense에서 "OnFormClosing"을 선택하십시오. 귀하의 코드 블록은 다음과 같을 것입니다 : 특정 이유가되지 않음이없는 경우와 같이

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

    base.OnFormClosing(e); 
} 

기본 메서드를 재정 항상 기본 호출을 포함한다.

-1

시도는 해봤 나를 위해 매우 잘 작동 : 희망은 당신이 당신의 이벤트가 최대 유선되지

+0

시도했습니다. 변하지 않는다. 외관상으로는 이것은 다른 코멘트에 따르면 작동해야한다, 그래서 무언가는 나의 끝에 부정확해야한다. 내가 놓치거나 잊어 버린 것 –

관련 문제