簡體   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