![](/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.