2015-06-07 42 views
-1
private void Form1_Load(object sender, EventArgs e) 
{ 
    f2 = new Form2(); 
    f2.Show(); 
} 

我在Form1上有該代碼。這樣會自動運行Form2_Load。當我點擊Form1上的按鈕時有可能嗎? Form2_Load將再次運行而不必關閉Form2。刷新/重新從表格1到表格2

+1

你究竟在做什麼? 'Form2_Load'只會在'Form2' *載入*時運行。所以你需要打開一個'Form2'的新實例,你可以用你顯示的確切代碼來做。 – David

+0

如果代碼值得運行,請將其放入一個名字很好的函數中,並在需要時調用它。用任何數量的邏輯編碼事件都是不好的。 – TaW

+0

@David謝謝你。抱歉。我仍然是C#新手。我試圖使用觀察者模式。從Form1到Form2。表格2是觀察者。當單擊Form1上的按鈕時,它將向form2發送消息更新。 Form2中的文本框將顯示該消息。 – user3293347

回答

1

在回答您的評論:

在Form1上放置一個按鈕,點擊它會消息更新發送到窗體2。 Form2中的文本框將顯示該消息。

(。首先,這不是Observer模式,但沒關係,這並不需要的人。)

首先,Form1需要其參考保留的Form2實例:

public class Form1 
{ 
    private Form2 Form2Instance { get; set; } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Form2Instance = new Form2(); 
     Form2Instance.Show(); 
    } 

    // the rest of your code 
} 

現在Form1上的其他代碼可以引用該實例。這是因爲你實際上不想重新加載所有的Form2任何時候都會有變化。你只是想「發送消息更新到form2」。

現在,怎麼會Form2收到那條消息?它可以暴露一種方法。事情是這樣的:

public class Form2 
{ 
    public void Update(string newValue) 
    { 
     someTextBox.Text = newValue; 
    } 

    // the rest of the code 
} 

現在上Form1代碼可以調用該方法上的Form2的情況下,它的引用。所以,當你點擊一個Form1按鈕,你可以這樣做:

Form2Instance.Update("some value"); 

這將「發送消息」來的Form2實例。

+1

非常感謝你,先生!現在我明白了。 – user3293347