반응형
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
반응형
'programing' 카테고리의 다른 글
"Microsoft의 이니셜라이저 유형이 표시됩니다.Azure SDK 2.9 설치 후 ccproj 파일을 열 때 'Cct.CctProjectNode'가 예외를 발생했습니다. (0) | 2023.05.20 |
---|---|
단일 스크립트를 윈도우즈 배치 및 리눅스 Bash에서 모두 실행하시겠습니까? (0) | 2023.05.20 |
모든 파일의 후행 공백을 재귀적으로 제거하는 방법은 무엇입니까? (0) | 2023.05.20 |
jQuery에서 클래스가 여러 개인 요소를 선택하려면 어떻게 해야 합니까? (0) | 2023.05.20 |
장고 템플릿 내에서 내 사이트의 도메인 이름을 가져오는 방법은 무엇입니까? (0) | 2023.05.20 |