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