簡體   English   中英

如何保持從主程序重新啟動Windows窗體,直到另一個窗口窗體退出應用程序?

[英]How to keep re-launching a windows form from the main program until another window form exits the application?

我有一個C#Windows程序,它具有兩種形式,這些形式通過RunApplication從主程序線程連續打開。 執行流程本質上是:

  • 用戶運行Setup.exe,啟動主程序線程(Setup.cs)
  • 主程序啟動窗體A,該窗體顯示可用配置文件的列表視圖
  • 用戶選擇一個,單擊下一步,表格A關閉
  • 主程序線程加載所選的配置文件
  • 主程序線程啟動表格B

     Application.Run(new FormB { Size = new Size(530, 421) }); 
  • 表格B具有許多選項卡,這些選項卡可能會或可能不會顯示,具體取決於所選的配置文件。 用戶單擊此表單上的“下一步” /“上一步”在選項卡之間導航
  • 如果用戶位於表單B的標簽索引0上,並且用戶單擊“上一步”按鈕,則表單B應該關閉並允許表單A再次顯示

最后一點是我遇到了一些問題-我希望當用戶單擊Form B上的后退按鈕並且選項卡索引為0 ,我可以設置一些公共靜態變量以表明它是“返回”模式,並在主線程中重新啟動FormA。 但是,我不能使用簡單的循環來表示它不是ExitMode(而是ReturnMode)時,啟動Form B,因為它將反復打開/關閉Form B的實例。 我想我可以設置循環條件來說明是否是ReturnMode,而尚未啟動Form B,請啟動Form B-但在關閉Form B之前反復檢查似乎很不好。 (這里需要穿線嗎?)

我還以為我可以改為在窗體B中啟動窗體A-例如,如果選定的選項卡索引為0,則窗體B的btnBack_Click運行一個函數來啟動窗體A。由於我無法在另一個窗體內啟動Application.Run()在Application。()中,我創建了Form A的實例,並嘗試了formA.Show() 但是,如果我這樣做,Form B會在后台徘徊,而且似乎也無法在不關閉Form A的情況下將其關閉。

FormA form_a = new FormA { Size = new Size(530, 421) };                

FormB install_screens_active = Application.OpenForms["FormB"];
FormA.Show();

if (install_screens_active != null)
{ 
    install_screens_active.Close();
}

您可以將引用傳遞給窗體B的主線程。從那里,如果用戶在索引為0時按下窗體B的后退按鈕,請在引用的線程上調用將關閉窗體B並打開窗體A的方法。

那這樣的東西呢?

static class Program
{
    static void Main()
    {
        do
        {
            var formA = new FormA();
            Application.Run(formA);
            var formB = new FormB(formA.SelectedConfigurationFile);
            Application.Run(formB);
        } while (!IsComplete);
    }

    public static IsComplete { get; set;}
}

public class FormB
{
    protected override void OnFormClosed(FormClosedEventArgs e)
    {
        base.OnFormClosed(e);
        if (e.CloseReason == CloseReason.UserClosing)
            Program.IsComplete = true;
    }

    private void btnCancel_Click(object sender, EventArgs e)
    {
        Program.IsComplete = true;
        Close();
    }

    private void btnBack_Click(object sender, EventArgs e)
    {
        if (this.Tabs.SelectedIndex == 0)
        {
            Program.IsComplete = false;
            Close();
        }
    }
}

暫無
暫無

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

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