簡體   English   中英

如何知道Form App是否打開C#

[英]How to know if the Form App open or not c#

有誰知道我是否知道Windows窗體應用程序(C#)是打開的還是客戶端關閉了?
(在我的應用程序中,我有一個Windows窗體應用程序(Form1),該窗體允許用戶打開另一個窗體(Form2)。我想知道Form2是打開還是關閉。)
我需要知道這一點,因為我是從線程運行Form2的,並且我想使線程runnig直到用戶關閉Form2。
非常感謝!

您可以像這樣(使用LINQ)檢查是否在應用程序中打開了給定類型的表單:

if (Application.OpenForms.OfType<Form2>().Count() > 0)
{
    // there is an instance of Form2 loaded
}

你需要更詳細地闡述你的問題。 您是在談論從另一個應用程序監視應用程序嗎? 還是一種形式需要知道另一種形式是否已打開? 還是一個表單需要知道其他表單何時關閉?

有兩種方法可以監視同一應用程序中的表單關閉。

在窗體上調用ShowDialog()而不是Show()將確保在用戶關閉窗體之前 ,不會執行ShowDialog()調用之后的代碼。

Form類具有Visible屬性,該屬性根據表單是否可見返回true / false。

對於應用程序本身,靜態Application類上有一個ApplicationExit事件,該事件在Application程序關閉之前被調用,因此,例如,如果您需要在退出時執行一些清理操作,則可以監聽該事件。

如果只想運行單個應用程序實例,請檢查鏈接。
在那里,您還將看到如何檢查進程是否仍處於活動狀態。

如果您的意思是MDI應用程序及其子窗體:

private Dictionary<Type, Form> SingleInstanceForms = new Dictionary<Type, Form>();

public Form ActivateForm<T>() where T : Form, new()
{
    Cursor.Current = Cursors.WaitCursor;

    if (!this.SingleInstanceForms.ContainsKey(typeof(T)))
    {
        T newForm = new T();
        //setup child
        newForm.MdiParent = this;
        newForm.WindowState = FormWindowState.Maximized;
        //newForm.Icon = Icon;

        newForm.FormClosed += new FormClosedEventHandler(delegate(object sender, FormClosedEventArgs e)
        {
            this.SingleInstanceForms.Remove(sender.GetType());
        });

        this.SingleInstanceForms.Add(typeof(T), newForm);

        newForm.Show();
        this.Refresh();
    }

    Form formToActivate = this.SingleInstanceForms[typeof(T)];
    formToActivate.Activate();

    Cursor.Current = Cursors.Default;

    return formToActivate;
}

如果尚未創建子窗體,它將創建子窗體;如果已創建,則將其激活。

示例: ActivateForm<dlgChildOne>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM