我对 Visual Studio (Express) 和 C# 很陌生。我制作了一个窗口表单,它接受一些用户输入,然后在消息框中显示该输入(它会自动带有一个“确定”按钮,单击时会关闭消息框)。
相反,我希望第一个表单收集的用户输入显示在一个新表单中,该表单显示一条消息(标签),显示输入,并提供两个按钮的选择:一个接受,一个返回并更改输入。
我不知道如何做到这一点,任何建议表示赞赏。
我对 Visual Studio (Express) 和 C# 很陌生。我制作了一个窗口表单,它接受一些用户输入,然后在消息框中显示该输入(它会自动带有一个“确定”按钮,单击时会关闭消息框)。
相反,我希望第一个表单收集的用户输入显示在一个新表单中,该表单显示一条消息(标签),显示输入,并提供两个按钮的选择:一个接受,一个返回并更改输入。
我不知道如何做到这一点,任何建议表示赞赏。
听起来您需要确认消息或类似的东西。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 的参考
您需要以某种方式将信息从第一种形式传递到第二种形式。这可以通过在子窗体上设置属性来完成,或者通过单个属性(字符串、整数等)或通过完整的数据结构(对象)。输入表单收集信息,创建子子表单,在其上设置属性,然后显示表单。许多其他方法可以做到这一点,但先从简单开始,然后逐步发展到复杂。
如果您需要将一些数据传递给您的第二个表单,请在该表单上创建一个/多个属性,或通过构造函数参数提供数据。还要为第二个表单上的两个按钮分配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
您可以附加到的事件;这将允许您的父表单在子表单关闭时运行一些代码。
字符串一些数据;//根据用户输入填充 Form2 childForm = new Form2(someData);
childForm.FormClosing += (sendingForm, args) =>
{
this.Show();
bool result = childForm.DidUserAccept;
}
在这里,我在子表单上使用了一个属性DidUserAccept
,用于判断用户是接受还是拒绝了该值。我们需要在 Form2 中定义它:
public bool DidUserAccept {get; private set;}
在接受/取消的按钮单击处理程序中,您可以相应地设置结果,然后关闭表单(关闭将触发关闭事件并在Form1
.