我如何等待Form2完成?

时间:2019-10-20 13:13:36

标签: c#

我有一个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();

预先感谢

3 个答案:

答案 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会自动将其返回。

在对话框形式中,您可以将这些按钮分配给AcceptButtonCancelButton属性。这使您可以通过 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;
   }
   ...
}

...是您现有的代码。