繁体   English   中英

如何从C#中的另一个表单打开表单

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM