Windows窗体启动另一个窗体

4
我对Visual Studio(Express)和C#还很陌生。我创建了一个Windows窗体,接受一些用户输入,然后在消息框中显示该输入(当点击“OK”按钮后,消息框自动关闭)。
相反,我希望第一个窗体收集的用户输入可以在一个新窗体中显示一个消息(标签),显示输入并提供两个按钮的选择:一个是接受,一个是返回并更改输入。
我不知道如何实现这一点,感谢任何建议。

展示你的代码以显示用户输入表单将是有益的。 - Erik Philips
4个回答

3

看起来您需要一个确认消息或类似的东西。 MessageBox类提供了这个功能。

   DialogResult btn = MessageBox.Show("your message", 
                                      "your title", 
                                      MessageBoxButtons.OKCancel, 
                                      MessageBoxIcons.Question);
   if(btn == DialogResult.Cancel)
        // User canceled, return to the string editor 
   else
        // User confirmed, do you work 

如果您更喜欢,还有一个用于MessageBoxButtons.YesNo的枚举,对应的DialogResult.Yes和DialogResult.No。 请参阅此处了解MessageBoxButtons的参考信息
请参阅此处了解MessageBoxIcons的参考信息

如果用户选择“取消”,我该如何关闭消息框? - Kevin
它会自动关闭并返回DialogResult.Cancel。 - Steve

1
你需要做的是将第一个表单中的信息传递到第二个表单中。这可以通过在子表单上设置属性来完成,可以通过单个属性(字符串、整数等)或完整的数据结构(对象)来实现。输入表单收集信息,创建子表单,设置其属性,然后显示表单。还有许多其他方法可以实现此目的,但首先从简单的开始,然后逐步增加复杂度。

1

如果您需要将一些数据传递到第二个表单,请在该表单上创建属性或通过构造函数参数提供数据。还要为第二个表单上的两个按钮分配DialogResult属性。将DialogResult.OK设置为接受输入的按钮。当您将其显示为对话框并执行适当的操作时,请验证第二个表单返回的值:

using(SecondForm secondForm = new SecondForm()
{
   secondForm.Data = yourData;
   if (secondForm.ShowDialog() != DialogResult.OK)
   {
       // go back and change input
       return
   }

   // accept input
}

1

所以你的Form2需要有一些值,由创建它的任何东西提供,才能存在。永远不应该有没有这些信息的Form2实例。这告诉你它应该在该表单的构造函数中(而不是该表单上的属性)。

这意味着在Form1中,你会有类似这样的代码:

string someData; //populate based off of user input
Form2 childForm = new Form2(someData);
//then hide current form and show child form

在Form2中,您可能已经有一个构造函数,您只需要将其修改为类似以下内容的形式:
public Form2(string someData) //TODO give better parameter name
{
  someLabel.Text = someData;
}

接下来我们需要处理子窗体返回到父窗体的问题。我认为最好的方法是使用事件。该窗体有一个FormClosing事件,您可以将其附加到;这将允许您的父窗体在子窗体关闭时运行一些代码。
string someData; //根据用户输入填充 Form2 childForm = new Form2(someData);
childForm.FormClosing += (sendingForm, args) =>
{
  this.Show();
  bool result = childForm.DidUserAccept;
}

在这里,我在子窗体上使用了一个属性DidUserAccept,用于判断用户是否接受或拒绝该值。我们需要在Form2中定义它:

public bool DidUserAccept {get; private set;}

在接受/取消按钮的单击处理程序中,您可以相应地设置结果,然后关闭表单(关闭将触发关闭事件并运行Form1中相关的代码)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接