如何檢測窗體/窗口控件框右上角的關閉(X)按鈕的單擊事件?請注意,我不想了解CloseReason,FormClosing,FormClosed或類似的東西,除非它們是不可避免的。我正好 想要檢測用戶是否單擊了表單的X按鈕。謝謝。在winforms中檢測X按鈕單擊窗口
回答
如果你真的有很好的理由不使用FormClosing, CloseReason, ...
,你可以重寫窗口過程,寫這樣的事:
protected override void WndProc(ref Message m)
{
const int WM_NCLBUTTONDOWN = 0x00A1;
const int HTCLOSE = 20;
if (m.Msg == WM_NCLBUTTONDOWN)
{
switch ((int)m.WParam)
{
case HTCLOSE:
Trace.WriteLine("Close Button clicked");
break;
}
}
base.WndProc(ref m);
}
謝謝@Yuriy。請檢查我的後續文章... – priyamtheone 2012-03-18 16:16:24
我知道這是舊的線程,但這裏是一個解決方案。
要獲得WM_NCLBUTTONUP工作時,不要打電話給基地的WndProc當你WM_NCLBUTTONDOWN消息:
protected override void WndProc(ref Message m)
{
const int WM_NCLBUTTONDOWN = 0x00A1;
const int WM_NCLBUTTONUP = 0x00A2;
const int HTCLOSE = 20;
if (m.Msg == WM_NCLBUTTONDOWN)
{
switch ((int)m.WParam)
{
case HTCLOSE:
// WndProc Form implementation is buggy :
// to receive WM_NCLBUTTONUP message,
// don't call WndProc.
break;
default:
base.WndProc(ref m);
break;
}
}
else
{
if (m.Msg == WM_NCLBUTTONUP)
{
switch ((int)m.WParam)
{
case HTCLOSE:
Trace.WriteLine("Close Button clicked");
Close(); // Optional
break;
}
}
base.WndProc(ref m);
}
}
一個解決方案總是可以接受的,除非緊急,否則時間並不重要。這是我想要的。謝謝。 – priyamtheone 2013-11-05 15:56:33
如果問題沒有太多要求,那麼我還想知道在單擊標題欄左上角時出現的窗口的「系統關閉菜單」中如何檢測到同樣的情況,同時關閉窗口ALT + F4或CTRL + F4(如果是MDI子)? – priyamtheone 2013-11-05 16:00:22
- 1. 關閉按鈕上的窗口單擊
- 2. 關閉窗口按鈕單擊
- 3. 使用UIAlertView檢測按鈕單擊
- 4. WebView檢測按鈕單擊事件
- 5. Visual C++檢測右鍵單擊按鈕
- 6. 單擊按鈕時檢測時間
- 7. 檢測輸入並單擊按鈕
- 8. 通過單擊X按鈕
- 9. monomac - 如何在單擊主窗口中的按鈕時關閉子窗口
- 10. 在表格行中添加單選按鈕並檢測按鈕單擊Android
- 11. 單擊鏈接按鈕時在新窗口中打開頁面
- 12. 在新窗口中打開單擊的超鏈接按鈕
- 13. 如何在sketchflow中單擊按鈕時顯示子窗口?
- 14. 在用戶控件中單擊按鈕時激活主窗口
- 15. 如何在Unity中單擊按鈕後顯示模式窗口?
- 16. 如何檢測通過Alt + F4關閉的瀏覽器窗口或單擊窗口的關閉按鈕?
- 17. java檢測點擊按鈕
- 18. 如何從qtablewidget中檢測單元格中單擊的按鈕
- 19. 模擬單擊C中另一個窗口中的按鈕#
- 20. 如何檢測QtWebKit中的窗體重置按鈕的點擊?
- 21. 如何檢測在javascript中單擊了哪個按鈕?
- 22. Tkinter,在Toplevel窗口上按鈕單擊顯示日曆
- 23. 如何在按鈕單擊後關閉彈出窗口模式
- 24. 單擊按鈕打開當前窗口中的網址
- 25. Iframe中的表單按鈕,單擊時在父窗口中加載
- 26. 單擊表單按鈕打開新的瀏覽器窗口
- 27. 檢測其任務欄按鈕被點擊(確定目標窗口)
- 28. 點擊按鈕淡出彈出窗口?
- 29. 點擊按鈕彈出窗口
- 30. File.ReadAllText阻止窗體關閉x按鈕單擊
你爲什麼要?如果您使系統菜單中的「關閉」菜單項與X按鈕的操作方式不同,最終會讓人感到困惑。 – hvd 2012-02-25 16:04:19
任何不使用FormClosing並在其中設置e.Cancel = true的理由? – 2012-02-25 16:06:48
可能的原因:表單可能被其他應用程序關閉,因此用戶必須被告知由X關閉並不會幫助,而是必須關閉該應用程序。 – Alex 2013-03-21 10:13:30