WPF 中关闭窗口事件 我想在点"X"关闭时提示信息,如果选是则关闭程序如果轩否就不关闭

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 中关闭窗口事件 我想在点"X"关闭时提示信息,如果选是则关闭程序如果轩否就不关闭相关的知识,希望对你有一定的参考价值。

最好有例子,谢谢
Button closeBtn = (Button)baseWindowTemplate.FindName("CloseBtn", this);
closeBtn.Click += delegate

Wnd_YesNoMsgbox messageBox = new Wnd_YesNoMsgbox();
messageBox.SetText("\t\t您是否要退出?");
var closeConfirm= messageBox.ShowDialog();
if (closeConfirm.Value)

Application.Current.Shutdown();


;
这是我研究很久的方案 希望对你们有所帮助

很简单哟。只需在窗口的Window_Closing事件中加点代码就可以了。
具体代码如下:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)

MessageBoxResult result = MessageBox.Show("Do you really want to exit?","", MessageBoxButton.YesNo);
if (result == MessageBoxResult.No)

e.Cancel = true;

追问

这个我知道,我是想问我的控件都是重绘的,事件不再同一个.CS中,所以写这个不能实现,要是这么简单我就不会问了,网上有很多,我想知道我怕重绘之后的事件是直接关闭的,我想让它在关闭前做这些操作,求高人啊

追答

什么叫控件都是重绘的?是都重新实例化么?就是你的弹出窗口是自己的UserControl,是不是这个意思?楼主可以贴上自己的代码,供大家分析么?
OK,看了你的方案。应该是可行的。你在运行的过程中遇到些什么问题么?

参考技术A 你现在点X的时候是怎么关闭的,给那些代码加上判断就行!

如何在 macOS 中关闭 OpenCV 窗口(Python 3)?

【中文标题】如何在 macOS 中关闭 OpenCV 窗口(Python 3)?【英文标题】:How to close OpenCV window (Python 3) in macOS? 【发布时间】:2021-11-19 01:48:04 【问题描述】:

我是第一次使用 macOS High Sierra 和 Spider IDE 进行 Python 编程。

当我按键盘上的q键时,窗口没有关闭。输出窗口在最后一帧冻结,控制返回到 Python 提示符。

我们将不胜感激任何解决方案或解决方法。我也很想知道原因。

以下是 Python 和 OpenCV 版本的详细信息。

Python 3.9.7 OpenCV 4.5.3 Spyder 5import cv2

The code is as follows,

import cv2
frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(0)
cap.set(3, frameWidth)
cap.set(4, frameHeight)
cap.set(10,150)
window_name = "Result"
cv2.namedWindow(window_name)

while cap.isOpened():
    success, img = cap.read()
    if success:
        cv2.imshow(window_name, img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
cap.release()
cv2.destroyWindow(window_name)

【问题讨论】:

那是因为你被困在循环中……因为你没有在视频结束时打破循环。 -- isOpened 将永远保持真实。它只告诉您文件可以打开和读取,而不是视频已经结束。创建 VideoCapture 实例后,您必须仅检查一次 isOpened。你必须检查并打破:if not success: break。每个人都做错了,因为每个人似乎都遵循写得很糟糕的“教程”甚至“视频教程”。不得不一直重复这一点很累。 我将它替换为 true,它仍然无法正常工作。 是的,因为我说的还不止这些。我说你也必须跳出循环。请不要只忽略第一点以外的所有内容。 【参考方案1】:

注意:成功变量 - 是一个布尔标志,告诉您下一帧是否可供读取。

如果成功为假,您可能已经到了视频的结尾。那么,你的程序就会陷入死循环,因为你从来没有满足if success: ...的条件,所以你无法到达命令if cv2.waitKey(1) & 0xFF == ord('q'): break

首先,您必须更改 while 循环中的条件。

改变

while cap.isOpened():
    success, img = cap.read()
    if success:
        cv2.imshow(window_name, img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

while cap.isOpened():
        success, img = cap.read()
        if not success:
            break   
        cv2.imshow(window_name, img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

如果您仍然遇到与我的 Jupyter Notebook 相同的问题,请尝试在销毁窗口后添加 cv2.waitKey(1)

cv2.destroyAllWindows()
cv2.waitKey(1)
cap.release()

【讨论】:

以上是关于WPF 中关闭窗口事件 我想在点"X"关闭时提示信息,如果选是则关闭程序如果轩否就不关闭的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IronPython 中关闭 WPF 窗口而不关闭 .NET 应用程序

在 WPF Frame 控件中关闭导航页面声音

在QT中关闭窗口之前获取应用程序退出信号

WPF 多窗口的close问题

防止对话框在按钮的单击事件处理程序中关闭

如何在WPF中关闭Tab关闭按钮?