programing

wpf 형식으로 창 닫기 버튼(창 오른쪽 상단 모서리의 빨간색 X 버튼) 이벤트를 포착하는 방법은 무엇입니까?

yellowcard 2023. 5. 20. 10:38
반응형

wpf 형식으로 창 닫기 버튼(창 오른쪽 상단 모서리의 빨간색 X 버튼) 이벤트를 포착하는 방법은 무엇입니까?

WPF 양식에서 윈도우 닫기 버튼(윈도우 오른쪽 상단 모서리의 빨간색 X 버튼) 이벤트를 어떻게 잡을 수 있습니까?우리는 마감 이벤트, 윈도우 언로드 이벤트도 받았지만, 그가 WPF 양식의 닫기 버튼을 클릭하면 팝업을 표시하고 싶습니다.

사용Closing창에서 이벤트를 다음과 같이 처리하여 닫히지 않도록 할 수 있습니다.

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    e.Cancel = true;
}

솔루션:

X 아이콘 버튼이 아닌 다른 곳에서 Close() 메서드가 호출되는지 확인할 수 있는 플래그있습니다.(예: IsNonCloseButtonClicked;)

IsNonCloseButtonClicked가 false인지 확인하는 Closing() 이벤트 메서드 내부에 조건문이 있습니다.

거짓인 경우, 앱은 X 아이콘 버튼이 아닌 다른 아이콘 버튼을 통해 스스로 닫으려고 합니다.true이면 이 앱을 닫기 위해 X 아이콘 버튼을 클릭한 것입니다.

[샘플 코드]

private void buttonCloseTheApp_Click (object sender, RoutedEventArgs e) {
  IsNonCloseButtonClicked = true;
  this.Close (); // this will trigger the Closing () event method
}


private void MainWindow_Closing (object sender, System.ComponentModel.CancelEventArgs e) {
  if (IsNonCloseButtonClicked) {
    e.Cancel = !IsValidated ();

    // Non X button clicked - statements
    if (e.Cancel) {
      IsNonCloseButtonClicked = false; // reset the flag
      return;
    }
  } else {

    // X button clicked - statements
  }
}

양식 2에서 확인 버튼을 누른 경우에는 작업을 수행하고, X 버튼을 누른 경우에는 아무것도 수행하지 않습니다.

public class Form2
{
  public bool confirm { get; set; }

    public Form2()
        {
            confirm = false;
            InitializeComponent(); 
        }

   private void Confirm_Button_Click(object sender, RoutedEventArgs e)
    {
       //your code
       confirm = true;
       this.Close();

    }

}

첫 번째 양식:

public void Form2_Closing(object sender, CancelEventArgs e)
        {
            if(Form2.confirm == false) return;

            //your code 
        }

VB.NET의 경우:

    Private Sub frmMain_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    ' finalize the class

    End Sub

Form X 버튼을 비활성화하려면:

'=====================================================
' Disable the X button on the control bar
'=====================================================
Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
    Get
        Dim myCp As CreateParams = MyBase.CreateParams
        myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON
        Return myCp
    End Get
End Property

1번 양식으로Designer.cs 이벤트를 할당하기 위해 아래 코드를 입력합니다.

this.Closing += Window_Closing;

form1.cs 에서 닫기 기능을 입력합니다.

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    //change the event to avoid close form
    e.Cancel = true;
}

사용해 보십시오.

        protected override void OnClosing(CancelEventArgs e)
        {
            this.Visibility = Visibility.Hidden;

            string msg = "Close or not?";
            MessageBoxResult result =
              MessageBox.Show(
                msg,
                "Warning",
                MessageBoxButton.YesNo,
                MessageBoxImage.Warning);
            if (result == MessageBoxResult.No)
            {
                // If user doesn't want to close, cancel closure
                e.Cancel = true;
            }
            else
            {
                e.Cancel = false;
            }
        }

언급URL : https://stackoverflow.com/questions/8969846/how-to-catch-the-event-of-the-window-close-buttonred-x-button-on-window-right-t

반응형