2014-12-01 53 views
0

我在想如何正確地在按鈕單擊事件之間切換窗體。在窗體之間切換並正確發送變量

我有Form1和Form2。 Form1中有:-TextBoxForm1 -ButtonForm1 Form2的有:-TextBoxForm2 -ButtonForm2

我想on_click ButtonForm1事件轉到窗體2。然後我想寫一些消息給TextBoxForm2並按下ButtonForm2它將再次進入Form1,TextBoxForm2中的消息將出現在TextBoxForm1中。

一切工作正常,但我有一個問題。當我關閉應用程序,我想調試並再次啓動時,出現一些錯誤:「應用程序已經在運行」。

Form1中:

public static string MSG; 
public Form1() 
    { 
     InitializeComponent(); 
     TextBoxForm1.Text = MSG; 
    } 
private void ButtonForm1_Click(object sender, EventArgs e) 
    { 
     Form2 form2 = new Form2(); 
     this.Hide(); 
//There is probably my fault but when I was trying this.Close(); everything shutted down 
     form2.Show(); 
    } 

窗體2:

private void ButtonForm2_Click(object sender, EventArgs e) 
    { 
     Form1.MSG = TextBoxForm2.Text; 
     Form1 form= new Form1(); 
     form.Show(); 
     this.Close(); 
    } 

我怎麼能這樣做正確嗎? :)我是初學者,謝謝!

+0

爲form2的FormClosing事件編寫一個事件處理函數。這告訴你需要使主窗口再次可見。 – 2014-12-01 15:43:59

回答

0

我不會去使用STATIC在表單之間傳遞的路由,因爲你提到你是初學者,但讓我們爲你工作。

在主窗體中創建一個新的方法來處理事件調用,正如Hans在評論中提到的。然後,一旦你創建第二個表單,附加到它的關閉事件強制表單1再次可見。

//你內幕Form1的類..

void ReShowThisForm(object sender, CancelEventArgs e) 
{ 
    // since this will be done AFTER the 2nd form's click event, we can pull it 
    // into your form1's still active textbox control without recreating the form 
    TextBoxForm1.Text = MSG; 
    this.Show(); 
} 

,並在其中創建窗口2

private void ButtonForm1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2(); 
    form2.Closing += ReShowThisForm; 
    this.Hide(); 
    form2.Show(); 
} 

和你的第二個表格點擊,您只需要設置靜態字段並關閉形式

private void ButtonForm2_Click(object sender, EventArgs e) 
{ 
    Form1.MSG = TextBoxForm2.Text; 
    this.Close(); 
} 
+0

謝謝!它工作得很好! :) – Kuri 2014-12-01 16:04:14

0

簡單的解決方案是使用模態形式。顯示Form2暫時,當它顯示時Form1是不可見的。

var form2 = new Form2(); 
this.Visible = false; // or Hide(); 
form2.ShowDialog(this); 
this.Visible = true; 

而傳遞數據,可以在Form2定義屬性,以例如:

public string SomeData {get; set;} 

Form1具有設置SomeData,您在Shown和顯示服用。可以使用相同的屬性從Form2(關閉前)獲取數據。

// form 1 click 
var form2 = new Form2() { SomeData = TextBoxForm1.Text; } 
this.Visible = false; 
form2.ShowDialog(this); 
this.Visible = true; 
TextBoxForm1.Text = form2.SomeData; 

// form 2 shown 
TextBoxForm2.Text = SomeData; 

// form 2 click 
SomeData = TextBoxForm2.Text; 
Close(); 
+0

是的,showDialog是一個不錯的選擇,但我們不知道表單的其他目的/將要做什麼。另外,如果需要從第二種形式返回到第一種形式的多種設置,該怎麼辦?有很多方法可以解決問題,但我只是基於他們已經開始的工作。總是很好地學習如何使用鉤入事件處理程序的地方。 – DRapp 2014-12-01 15:56:54

+0

@DRapp,我有壞習慣* XY問題*在每個問題中,所以這裏是* alternative *解決方案;) – Sinatr 2014-12-01 16:04:08