수색…


소개

이 항목에서는 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 를받습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow