수색…
소개
이 항목에서는 WinForms 엔진이 양식을 표시하는 방법과 수명을 제어하는 방법에 대해 설명합니다.
모덜리스 또는 모달 폼보기
WinForms 디자이너를 사용하여 양식의 구조를 정의한 후에는 양식을 두 가지 다른 방법으로 코드에 표시 할 수 있습니다.
방법 - 모델리스 폼
Form1 aForm1Instance = new Form1(); aForm1Instance.Show();
방법 - 모달 대화 상자
Form2 aForm2Instance = new Form2(); aForm2Instance.ShowDialog();
이 두 가지 방법은 매우 중요한 차이점이 있습니다. 첫 번째 방법 (모덜리스 1)은 양식을 표시 한 다음 방금 연 양식을 닫지 않고 즉시 반환합니다. 따라서 쇼 호출을 따르는 코드가 있으면 코드가 계속됩니다. 두 번째 방법 (모달 하나)은 폼을 열고 닫기 버튼을 통해 폼을 닫거나 폼을 닫도록 적절하게 구성된 일부 버튼을 사용하여 전체 응용 프로그램의 모든 활동을 차단합니다
모덜리스 폼 닫기
모덜리스 형식은 응용 프로그램 주 화면 (장치 또는 MDI 자식 창에서 비동기로 들어오는 데이터 흐름에 대한 범례 또는 전망)에 대해 영구적으로 무언가를 보여줄 필요가있을 때 (일반적으로) 채택됩니다.
그러나 모덜리스 형식은 당신이 그것을 닫고 싶을 때 독특한 도전을 제기합니다. 인스턴스를 검색하고 해당 인스턴스에서 Close 메서드를 호출하는 방법?
닫으려는 인스턴스를 참조하는 전역 변수를 보존 할 수 있습니다.
theGlobalInstance.Close();
theGlobalInstance.Dispose();
theGlobalInstance = null;
그러나 우리는 또한 폼 엔진이 생성되고 여전히 열려있는 모든 폼 인스턴스를 저장하는 Application.OpenForms 컬렉션을 사용할 수도 있습니다.
이 컬렉션에서 해당 인스턴스를 검색하고 Close 메서드를 호출 할 수 있습니다.
Form2 toClose = Application.OpenForms.OfType<Form2>().FirstOrDefault();
if(toClose != null)
{
toClose.Close();
toClose.Dispose();
}
모달 형식 닫기
ShowDialog
메서드를 사용하여 폼을 표시하면 폼의 DialogResult
속성을 폼에 가깝게 설정해야합니다. 이 속성은 DialogResult 라고도하는 enum을 사용하여 설정할 수 있습니다.
양식을 닫으려면 양식의 DialogResult
속성 ( DialogResult.None
의한 모든 값)을 일부 이벤트 처리기에서 설정해야합니다. 이벤트 처리기에서 코드가 종료되면 WinForm 엔진은 양식을 숨기고 초기 ShowDialog
메서드 호출을 따르는 코드가 계속 실행됩니다.
private cmdClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
호출 코드는 사용자가 폼에서 클릭 한 단추를 결정하기 위해 ShowDialog에서 반환 값을 캡처 할 수 있습니다. ShowDialog()
사용하여 표시 할 때 폼은 자동으로 처리되지 않으므로 (단순히 숨겨져 있고 닫히지 않았기 때문에) 폼을 처리하기 위해 using
블록을 사용하는 것이 중요합니다.
아래는 내장 된 OpenFileDialog
를 사용한 결과를 확인하고, 결과를 확인하고, 대화 상자에서 속성을 처리하기 전에 액세스하는 예제입니다.
using (var form = new OpenFileDialog())
{
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
MessageBox.Show("Selected file is: " + form.FileName);
}
}
버튼에 DialogResult
속성을 설정할 수도 있습니다. 이 단추를 클릭하면 폼의 DialogResult
속성이 단추와 관련된 값으로 설정됩니다. 이렇게하면 코드에서 DialogResult
를 설정하기위한 이벤트 처리기를 추가하지 않고도 폼을 닫을 수 있습니다.
예를 들어, 폼에 OK 단추를 추가하고 해당 속성을 DialogResult.OK
로 설정하면 해당 단추를 누르면 폼이 자동으로 닫히고 호출 코드는 ShowDialog()
메서드 호출에서 반환되는 DialogResult.OK
를받습니다.