2012-06-01 73 views
4

我是Visual Studio(Express)和C#的新手。我制作了一个窗体,它接受一些用户输入,然后在消息框中显示该输入(自动带有一个“确定”按钮,单击时关闭消息框)。Windows窗体启动另一种形式

相反,我想通过第一张表单收集的显示在显示一个消息(标签)的新形式的用户输入,显示输入,并提供两个按钮选择:一是接受和一个去返回并更改输入。

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

+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

+0

如何关闭该消息框,如果用户选择“取消”? – Kevin

+0

它关闭本身并返回的DialogResult。取消 – Steve

1

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

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 
} 
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 

在窗体2,你可能已经有一个构造函数,你只需要修改它的东西,如:

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上,用户是否接受或拒绝该值。我们需要定义在窗体2:

public bool DidUserAccept {get; private set;} 

在按钮单击处理程序接受/取消您可以设置相应的结果,然后关闭窗体(闭幕会引发Closed事件和矮他相关的代码Form1