Windows 窗体启动另一个窗体

本文关键字:窗体 另一个 启动 Windows | 更新日期: 2023-09-27 18:35:56

我对Visual Studio(Express)和C#很陌生。 我制作了一个窗口表单,该表单接受一些用户输入,然后在消息框中显示该输入(自动附带一个"确定"按钮,单击时关闭消息框)。

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

我不知道该怎么做,任何建议都是不胜感激的。

Windows 窗体启动另一个窗体

听起来你需要确认消息或类似的东西。类提供此功能。

   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

有关消息框按钮
的参考,请参阅此处有关消息框图标的参考,请参阅此处

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

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

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

所以你的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事件;这将允许您的父窗体在子窗体关闭时运行一些代码。

字符串 someData;//根据用户输入填充Form2 子窗体 = 新的窗体 2(一些数据);

childForm.FormClosing += (sendingForm, args) =>
{
  this.Show();
  bool result = childForm.DidUserAccept;
}

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

public bool DidUserAccept {get; private set;}

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