![](/img/trans.png)
[英]How can I pass a list from form1 to form2 to access it in a ButtonEvent in 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 具有這樣的OK
和Cancel
按鈕
var frm = new MyForm();
if (frm.ShowDialog(this) == DialogResult.OK) {
// OK button pressed
} else {
// Cancel button pressed
}
按鈕有一個DialogResult 屬性,您可以在屬性 window 中設置,該屬性將由ShowDialog
自動返回。
在對話框表單中,您可以將這些按鈕分配給AcceptButton和CancelButton屬性。 這允許您使用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.