我有一个WinForms应用程序,需要Form2中用户的输入。该应用程序需要等待Form2关闭。我需要使用什么代码才能让Form1等待其他窗体关闭?
form1
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);
form2
Form1.R1 = hScrollBar1.Value;
Form1.G2 = hScrollBar2.Value;
Form1.B3 = hScrollBar3.Value;
this.Close();
预先感谢
答案 0 :(得分:2)
有两种方法可以打开另一个表单
enter code here
和
var frm = new MyForm();
frm.Show();
DoSomething();
第一个变量打开另一个表单,然后立即执行var frm = new MyForm();
frm.ShowDialog();
DoSomething();
,而第二个变量DoSomething()
打开另一个表单,并等待直到另一个表单关闭,然后再执行{{1} }。
只需使用ShowDialog()
而不是DoSomething()
。
frm.ShowDialog();
还返回类型frm.Show();
的{{1}}值。您可以将这种结果用于具有ShowDialog()
和enum
这样的按钮的典型对话框形式
DialogResult
按钮具有一个DialogResult Property,您可以在属性窗口中进行设置,OK
会自动将其返回。
在对话框形式中,您可以将这些按钮分配给AcceptButton和CancelButton属性。这使您可以通过 Enter 激活“确定”按钮,并通过 Esc 激活“取消”按钮。
您可以将带有Cancel
的实际格式传递给var frm = new MyForm();
if (frm.ShowDialog(this) == DialogResult.OK) {
// OK button pressed
} else {
// Cancel button pressed
}
和ShowDialog
。这样的结果是对话框窗体停留在实际窗体的顶部。
答案 1 :(得分:0)
为什么不使用类并在其中定义这些变量,然后在每次需要时在form1中调用一个函数来检查这些变量,然后在form2中可以更改这些变量的值并将标志设置为true。 可以说我们有一个叫做“ ColorRbg”的类
public static int R1;
public static int B1;
public static int G1;
public static bool Flag1;
使用此标志来确定类中的值更改。然后定义一个类似“ CheckChange”的函数 在此函数中,您可以2如果条件为高,则循环with条件,然后更改,然后将其设置为低;否则,如果标志为false,则执行要执行的代码部分。
答案 2 :(得分:0)
您的form1类中有一个静态布尔值,类似于:
form2closed
最初将其设置为false。
在form2中创建一个新的FormClosing事件,该事件将此静态变量设置为true。
在form1中,当您必须等待form2关闭时,只需运行一次while循环来检查布尔值。
赞:
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;
}
...
}
...是您现有的代码。