我有一個名爲Form1的贏窗體窗口 - 一個名爲Label1的標籤, 兩個按鈕分別命名爲button1和button2。通過引用和值傳遞WinForm的結果
當我點擊按鈕1時,它創建鍵入Form1名爲f的新窗口, 其inintialized到當前窗口,即這個(Form1中), f是發送到名爲ChangeByReference作爲參考方法。
ChangeByReference方法改變窗體的文本,Label1的文本&前景色是 參照
過去了,當我在BUTTON2點擊,名爲ChangeByValue作爲值這個實例方法。
ChangeByValue方法創建一個新的窗口中初始化爲默認Form1中, 然後將其設置爲參數valForm的構造函數,我改變了一些特性,最終顯示了使用 Show方法吧。
現在的問題是爲什麼ChangeByValue方法調用正在銷燬原始窗口 並顯示新窗體,因爲它的參數是按值傳遞的?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Text = "Original Window";
}
public void ChangeByReference(ref Form1 refForm)
{
Form1 f = refForm;
f.label1.Text = "This is changed by Reference";
f.label1.ForeColor = Color.Aquamarine;
}
public void ChangeByValue(Form1 valForm)
{
Form1 f = new Form1();
f = valForm;
f.Text = "Changed Window";
f.label1.Text = "This is changed by Value";
f.label1.ForeColor = Color.Red;
f.Show();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 f = this as Form1;
ChangeByReference(ref f);
}
private void button2_Click(object sender, EventArgs e)
{
ChangeByValue(this);
}
}
然後,我應該寫什麼,以便另一個窗口從ChangeByValue方法spanhdws –
@RAZER只需刪除第二行('f = valForm;'),這將產生一個新的窗體。如果您想生成當前窗口的「副本」,則必須「克隆」當前窗體。 – Styxxy
只需從您的方法中刪除第二行。 – Kapol