[英]how to open a form from another form in c#
我正在编写用于串行密钥注册的代码。 如果用户输入的序列号是正确的,则必须打开另一个表格,并且必须关闭当前表格。
请去想代码。
namespace ExtTrigger
{
public partial class Activation : Form
{
public Activation()
{
InitializeComponent();
}
private void ActivateButton_Click(object sender, EventArgs e)
{
String key;
key = string.Concat(textBox1.Text,textBox2.Text,textBox3.Text,textBox4.Text);
if (key == "1234123412341234")
{
Properties.Settings.Default.Registered = true;
MessageBox.Show("hurray", "", MessageBoxButtons.OK);
Form1 f1= new Form1();
f1.ShowDialog();
this.Close();
}
else
MessageBox.Show("No Match", "", MessageBoxButtons.OK);
}
private void Activation_Load(object sender, EventArgs e)
{
}
}
我的问题是:单击ActivateBotton时,将打开Form1,但不会关闭当前表单。
我读过一些线程,可以在VB中更改属性:ShutdownMode。 我们如何在C#中做到这一点?
f1.ShowDialog();
阻止呼叫,直到关闭新表格后,它才转到下一行。
一种选择是使用:
f1.Show();
Show
不会阻止呼叫,它会传递到下一条语句。 它不会等待新表单关闭。
由于您已将第二个窗体显示为f1.ShowDialog()
因此第一个窗体保持打开状态直到第二个窗体关闭,请尝试执行此操作
Form1 f1= new Form1();
f1.Show();
this.Close();
以下代码可以解决问题:
using(Form1 f1 = new Form1())
{
this.Hide();
DialogResult result = f1.ShowDialog();
if(result == DialogResult.OK)
{
this.Show();
}
}
您可以在using-block中创建新表单,然后隐藏主表单(或当前所在的表单),并创建一个DialogResult,该对话框由新打开的表单设置并打开该表单。 现在,您可以在新表单内部设置要检查的结果,如果新表单内部一切正常,则可以通过以下方式将DialogResult设置为OK:
this.DialogResult = DialogResult.OK;
现在回到我们的第一个表单中,检查DialogResult,如果可以,则再次显示主表单。 如果还不行,您可以重新打开第二个表单,然后让用户重试。
打开一个新表单非常简单,但是您的操作方式实际上取决于您的需求。
情况1:我想冻结/阻止二次表单调用中的调用表单
在这种情况下,您应该使用
secondaryFormObj.ShowDialog();
当然,使用此技术时,您的被调用表单(现在充当对话框)应在闭合时“返回”其调用者父级的答案。 例如:
private void SecondaryForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// Just a dummy code example.
// Always returns Yes result on form closure
this.DialogResult = System.Windows.Forms.DialogResult.Yes;
}
有关这种方式的更多帮助和示例,您可以使用MSDN: DialogResult-MSDN
情况2:我希望两种形式都同时回复
在这种情况下,您基本上需要调用
secondaryFormObj.Show();
如果您希望在二次表单调用中隐藏调用者表单,只需调用this.Hide();
在调用secondaryFormObj.Show();
在呼叫者类中。您也可以使用
this.Close();
关闭呼叫者表单this.Close();
只要调用者表单不是应用程序的主要表单。
...记住
始终确保在使用
secondaryFormObj.Show();
调用辅助表单对象之前初始化了该辅助表单对象secondaryFormObj.Show();
或secondaryFormObj.ShowDialog();
或初始化表单的方式与使用
new
运算符的每个典型对象相同。
例如:secondaryFormObj = new Form();
希望这会有所帮助。 编码愉快!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.