如何在我的WinForm應用程序的主窗體中查看是否有任何屬於主窗體的模態窗口/對話框打開?可以通過表單判斷是否有任何模態窗口打開?
22
A
回答
5
長話短說:只要模態窗口打開,打開模態窗體就會在主窗體上執行塊,所以您的主窗體無法檢查它是否打開任何模態窗體直到模態窗體關閉。換句話說,你的問題是基於對模態形式如何工作的誤解,所以它完全沒有意義。
爲了什麼它的價值,它是可能告訴如果有任何模式的形式開放:
foreach (Form f in Application.OpenForms)
{
if (f.Modal)
{
// do stuff
}
}
30
if (this.Visible && !this.CanFocus)
{
// modal child windows are open
}
5
您也許可以使用EnterThreadModal
和LeaveThreadModal
的事件。下面是一個例子,你可以做到這一點:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.EnterThreadModal += new EventHandler(Application_EnterThreadModal);
Application.LeaveThreadModal += new EventHandler(Application_LeaveThreadModal);
Application.Run(new Form1());
}
private static void Application_EnterThreadModal(object sender, EventArgs e)
{
IsModalDialogOpen = true;
}
private static void Application_LeaveThreadModal(object sender, EventArgs e)
{
IsModalDialogOpen = false;
}
public static bool IsModalDialogOpen { get; private set; }
}
}
0
定時器仍然運行並引發事件。 舉例說明... public partial class Form1:Form { Form2 f2 = new Form2(); public Form1() { InitializeComponent(); }
private void timer1_Tick(object sender, EventArgs e)
{
f2.UpdateData(DateTime.Now.ToString());
if (!f2.Visible) f2.ShowDialog();
}
private void button1_Click(object sender, EventArgs e)
{
f2.ShowDialog();
MessageBox.Show("Done");
}
}
0
如果你google了一下,你會發現,Form.ShowDialog()禁止其他形式的,以防止用戶輸入這些形式在當前的一個。但是大多數其他事情(如定時器和來自顯示錶單外部的其他事件)繼續運行。
相關問題
- 1. 是否有可能檢測到任何模態對話框是否通過主窗口打開?
- 2. 如何判斷一個窗口是模態還是mdi窗口?
- 3. 如何判斷表單是否作爲子窗口啓動
- 4. 如何判斷是否在android中下拉通知窗口
- 5. firefox addOn-SDK:是否可以打開模態外部對話窗口?
- 6. 如何判斷一個窗口是否有焦點? (Win32 API)
- 7. 是否可以打開的窗口數量有限制?
- 8. WinForms - 檢測是否有任何對話窗口打開
- 9. 是否有可能通過IRowsetFastLoad判斷哪一行失敗?
- 10. 是否可以通過單擊按鈕刪除窗口?
- 11. XMLHttpRequest打開併發送:如何判斷它是否有效
- 12. 是否可以在任何打開的窗口上固定AIR應用程序?
- 13. 如何判斷Cocoa Touch設備是否可以撥打電話?
- 14. 如何判斷通知是否可以發送給Apple Watch?
- 15. 我如何通過任何陣列的窗口window.open()被打開
- 16. 如何檢查窗體是否有任何ShowDialog()窗體打開?
- 17. 如何判斷表單是否處於幫助模式?
- 18. jQuery模態窗口打開不是第一次模態
- 19. 如何判斷WPF窗口是否關閉?
- 20. 如何判斷鼠標是否位於頂層窗口?
- 21. 如何判斷用戶是否試圖用C++關閉窗口?
- 22. 如何判斷彈出窗口是否已完全加載
- 23. 如何判斷一個窗口是否使用GJS最小化?
- 24. PopupCenter通過打開新窗口而不是覆蓋以前的窗口
- 25. 是否可以在javascript中複製,粘貼,打開新窗口?
- 26. 彈出窗口打開時是否可以添加類?
- 27. 是否可以打開基於php條件的彈出窗口
- 28. 是否可以用新窗口打開文件?
- 29. 是否可以直接打開Outlook會議窗口?
- 30. 在模態窗口中打開xdsoft_datetimepicker在視口下面打開
這其實並非如此。如果它是真的,那麼每當你移動一個文件打開對話框時,它將不能重畫。所以至少繪畫會運行。一旦繪畫運行,你可以做任何事情。有幾個窗口消息通過並允許代碼執行 – JaredPar 2009-01-04 00:17:14
同意JaredPar,這是一個明智的問題。例如,如果您在調用之前檢查另一個線程,以顯示新的對話框,該怎麼辦? 儘管如此,代碼示例看起來不錯。 – John 2009-10-06 11:01:51
不幸的是,這段代碼沒有檢測到模態消息框(例如,當使用MessageBox.Show時)。 – 2011-08-24 21:25:52