簡體   English   中英

如何等待 form2 完成?

[英]How can I wait for form2 to finish?

我有一個 WinForms 應用程序,需要 Form2 中的用戶輸入。 該應用程序需要等待 form2 關閉。 為了讓 Form1 等待另一個表單關閉,我需要使用什么代碼?

表格1

public static int R1 = 0;
public static int G2 = 0;
public static int B3 = 0;
menuStrip1.BackColor = Color.FromArgb(100, R1, G2, B3);
panel1.BackColor = Color.FromArgb(100, R1, G2, B3);

表格2

Form1.R1 = hScrollBar1.Value;
Form1.G2 = hScrollBar2.Value;
Form1.B3 = hScrollBar3.Value;

this.Close();

提前致謝

有兩種方法可以打開另一個表單

var  frm = new MyForm();
frm.Show();
DoSomething();

var frm = new MyForm();
frm.ShowDialog();
DoSomething();

第一個變體打開另一個表單,然后立即執行DoSomething() ,而作為帶有ShowDialog()的第二個變體打開另一個表單並等到另一個表單關閉,然后再執行DoSomething()

只需使用frm.ShowDialog(); 而不是frm.Show(); .


ShowDialog()還返回DialogResult類型的enum值。 您可以將此結果用於典型對話框 forms 具有這樣的OKCancel按鈕

var frm = new MyForm();
if (frm.ShowDialog(this) == DialogResult.OK) {
    // OK button pressed
} else {
    // Cancel button pressed
}

按鈕有一個DialogResult 屬性,您可以在屬性 window 中設置,該屬性將由ShowDialog自動返回。

在對話框表單中,您可以將這些按鈕分配給AcceptButtonCancelButton屬性。 這允許您使用Enter激活 OK 按鈕,使用Esc激活 Cancel 按鈕。


您可以將帶有this的實際表單傳遞給Show(this)ShowDialog(this) 這具有對話框表單保持在實際表單之上的效果。

為什么不使用 class 並在其中定義這些變量,然后在 form1 中調用 function 以在每次需要時檢查這些變量,然后在 form2 中您可以更改這些變量的值並將標志設置為 true。 假設我們有一個名為“ColorRbg”的 class

    public static int R1;
    public static int B1;
    public static int G1;
    public static bool Flag1;

使用此標志來確定 class 中的值變化。 然后在此 function 中定義一個 function 之類的“CheckChange”,如果標志為高,則可以進行 2 次循環,然后將標志設置為低,否則如果標志為假,則執行您要執行的代碼部分.

在您的表單1 class 中有一個 static 布爾值,類似於: form2closed

最初將此設置為 false。

在 form2 中創建一個新的 FormClosing 事件,將這個 static 變量設置為 true。

在 form1 中,當您必須等待 form2 關閉時,只需運行一個 while 循環檢查 boolean。

像這樣:

public class Form1 
{
   public static bool form2closed = false;
   ...
   public void ChangeColours()
   {
       while (!form2closed) { }
       menustrip1.backcolour = ...
   }
   ...
}
public class Form2
{
   public Form2
   {
       ...
       this.FormClosing += Form2_FormClosing;
   }
   private void Form2_FormClosing(object sender, FormClosingEventArgs e)
   {
       Form1.form2closed = true;
   }
   ...
}

哪里...是您現有的代碼。

暫無
暫無

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

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