如何在c#中打开另一个表单的表单

时间:2016-05-04 07:26:34

标签: c# forms visual-studio-2015

我正在为串行密钥注册编写代码。 如果用户输入的序列密钥是正确的,则必须打开其他表格,并且必须关闭当前表格。

请考虑代码。

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#中做到这一点?

4 个答案:

答案 0 :(得分:1)

f1.ShowDialog();阻止了通话,在新表单关闭之前,它不会转到下一行。

选项是使用:

f1.Show();

Show没有阻止调用,它会传递给下一个语句。它不会等待新表格关闭。

答案 1 :(得分:0)

因为您已将第二个表单显示为f1.ShowDialog()所以第一个表单保持打开状态,第二个表单关闭,请尝试此操作

Form1 f1= new Form1();
f1.Show();
this.Close();  

答案 2 :(得分:0)

以下代码可以解决这个问题:

using(Form1 f1 = new Form1())
{
    this.Hide();

    DialogResult result = f1.ShowDialog();
    if(result == DialogResult.OK)
    {
       this.Show();
    }
}

您在使用块中创建新表单,然后隐藏主表单(或您当前所在的表单)创建一个由新打开的表单设置并打开此表单的DialogResult。现在,您可以在新表单中设置要检查的结果,如果新表单中的所有内容都很顺利,则可以通过以下方式将DialogResult设置为OK:

this.DialogResult = DialogResult.OK;

现在回到我们的第一个表单中,检查DialogResult,如果可以,则再次显示主表单。如果不行,你可以重新打开第二个表格,让用户再试一次。

答案 3 :(得分:0)

打开新表单非常简单,但您的表现方式实际上取决于您的需求。

案例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();关闭来电表单。

...请记住

  

始终确保您之前初始化了辅助表单对象   用secondaryFormObj.Show();或者secondaryFormObj.ShowDialog();调用它   new

     

初始化表单的方式与使用的每个典型对象相同   secondaryFormObj = new Form();运营商。
  例如:import requests url = 'https://ndber.seai.ie/pass/ber/search.aspx' payload = {'ctl00$DefaultContent$BERSearch$dfSearch$txtBERNumber':'100000000' } #the above dictionary key corresponds to the name , found using Firefox inspector in the source code. #I have tried using input ID too with no difference in outcome #enter in arbitrary number of '100000000'- expect to see 'Invalid ID Number' printed r = requests.post(url, data = payload) print(r.status_code, r.reason) print(r.text) if 'Number.'in r.text: #'Number' is an arbitrary word that happens to be in the page if a correct ID code is entered print('Valid ID Number') elif 'No results found.' in r.text: #as above, 'No results found' is in the page if an incorrect ID is entered print('Invalid ID Number') #with the aboove number entered, I would expect this line to be printed else: print('Code Failure') #this line gets printed

希望这会有所帮助。快乐的编码!