[英]How to keep re-launching a windows form from the main program until another window form exits the application?
我有一個C#Windows程序,它具有兩種形式,這些形式通過RunApplication從主程序線程連續打開。 執行流程本質上是:
主程序線程啟動表格B
Application.Run(new FormB { Size = new Size(530, 421) });
最后一點是我遇到了一些問題-我希望當用戶單擊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.