Windows窗体启动另一个窗体

时间:2012-06-01 14:42:34

标签: c# winforms visual-studio

我是Visual Studio(Express)和C#的新手。我创建了一个窗口表单,接受一些用户输入,然后在消息框中显示输入(自动附带一个“确定”按钮,单击时关闭消息框)。

相反,我希望第一个表单收集的用户输入以新形式显示,显示消息(标签),显示输入,并提供两个按钮选择:一个接受,一个返回并改变输入。

我不知道如何做到这一点,任何建议都表示赞赏。

4 个答案:

答案 0 :(得分: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

See here for a reference on MessageBoxButtons
See here for a reference on MessageBoxIcons

答案 1 :(得分:1)

您需要的是以某种方式将信息从第一种形式传递到第二种形式。这可以通过在子表单上设置属性来完成,可以通过单个属性(字符串,整数等)或完整的数据结构(对象)来设置。输入表单收集信息,创建子子表单,在其上设置属性,然后显示表单。许多其他方法可以做到这一点,但从简单开始,然后构建复杂。

答案 2 :(得分:1)

如果您需要pass some data到第二个表单,请在该表单上创建属性/属性,或通过构造函数参数提供数据。同时为第二个表单上的两个按钮指定DialogResult property。将DialogResult.OK设置为接受输入的按钮。当您show it as dialog并执行适当的操作时,验证第二个表单返回的值:

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

   // accept input
}

答案 3 :(得分: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中查看相关代码。