2011-08-04 51 views
0

我有2個窗體 - Form1和Form2。在c中的窗體之間傳遞變量#

Form1中:

public partial class Form1 : Form 
    { 
     public void Drawnewmap(bool suzey) { 
      bool dsuzey=suzey; 
      if (dsuzey==true) textBox1.Text = "1" ; 

     } 

     public Form1() 
     { 
      InitializeComponent(); 
     } 
    } 

窗體2:

private void button1_Click(object sender, EventArgs e) 
{ 
    Form1 f1 = new Form1(); 
    bool m = false; 
    if (checkBox1.Checked == true) m = true; 
    f1.Drawnewmap(m); 
    this.Close(); 
} 

但是當我點擊,什麼也不會發生。 TextBox是空的。爲什麼? 對不起,英文不好,謝謝你的回答。

+0

僅供參考 - 您不必在條件中使用'== true'。你可以說'if(checkBox1.Checked)m = true;'。 'if(dusuzey)textBox1.Text =「1」;'。這會迫使你命名這些變量,以便立即明白它們爲什麼是「true」或「false」,比如'bool is_box_checked; .. if(is_box_checked){..}'。 – ja72

+1

@ ja72:它應該更像是一個謂詞而不是一個問題:'box_is_checked',因此:'if(box_is_checked)...'。 –

回答

1

因爲您創建了新的Form1實例。我認爲在子窗口中從父窗口調用某些東西是不好的主意。但是你可以做smoething這樣的: 當您創建窗體2,通過參考當前Form1的對象

Form2 form = new Form2(this); 

在Form2的構造函數保存在私有變量Form1的參考。

private Form1 myform1; 

然後你的代碼需要看起來像這樣:

private void button1_Click(object sender, EventArgs e) 
{ 
    bool m = false; 
    if (checkBox1.Checked == true) m = true; 
    myform1.Drawnewmap(m); 
    this.Close(); 
} 
1

您沒有顯示您創建的form1

private void button1_Click(object sender, EventArgs e) 
{ 
    Form1 f1 = new Form1(); 
    bool m = false; 
    if (checkBox1.Checked == true) m = true; 
    f1.Drawnewmap(m); 

    f1.Show();//or ShowDialog()... 
    this.Close(); 
} 

注意,如果Form2形式主要是「你可以在主要檢查有關」,如果您關閉它,它就會退出整個應用程序,所以如果是這樣的情況下,或者讓form1的是主要形式,或致電本this.Hide();代替this.Close();

2

你從來沒有真正展現形式,也許你應該有更多的東西一樣:

我有2種形式 - Form 1和Form。

private void button1_Click(object sender, EventArgs e) 
{ 
    Form1 f1 = new Form1(); 
    bool m = false; 
    if (checkBox1.Checked == true) m = true; 
    f1.Drawnewmap(m); 
    f1.Show(); // You're missing this call 
    this.Close(); 
} 
1

我更願意解決持有的狀態

== 表格形式使用屬性這個問題1 ==

public partial class Form1 : Form 
{ 
    bool is_dsuzey; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     if (is_dsuzey) textBox1.Text = "1"; 
    } 
    public bool IsDsuzey { get { return is_dsuzey; } set { is_dsuzey = value; } } 

} 

== Form 2 ==

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form1 f1 = new Form1(); 
     f1.IsDsuzey = checkBox1.Checked; 
     f1.Show(); 
    } 
} 

我要提醒把一個this.Close();聲明Form2,如果它是應用程序的主要形式,因爲它會收出整個應用程序。如果Application.Run()調用某種其他形式,那麼沒有問題。

2

如果你想通過你的第二個形式,以達到你的第一個活性形式,你應該在你的第二個形式像定義第一種形式:

Form1 frm = (Form1)Application.OpenForms["Form1"]; 

,而不是

Form1 f1 = new Form1(); 

既然你將創建一個新的窗體,如果您使用「Form1 f1 =新的Form1();」,您將不會到達活動窗體。