2010-05-24 39 views
0

假設我有兩種形式。在Form1中,我有一個計數器(計數++),在Form2中我有一個文本框(textBox1),它顯示了計時器的計數。現在我想知道如何在沒有任何用戶干擾(單擊按鈕)的情況下在'textBox1'中顯示整數'count',換句話說,我將如何使文本框中的數據自動刷新(不使用Form2 form = new Form2(); form.Show();)。我想要2個獨立的窗口,一個運行計時器,另一個文本框顯示定時器計數了多少,並不斷更新(在定時器的幫助下,我假設)。在表單之間發送數據時不使用.Show()

回答

3

一種方法是創建一個公共事件並從另一個表單註冊該事件。

0

您可以有一個單一/靜態類,它包含與所有表單相關的所有數據,並將其公開爲屬性。所有表單都可以編寫和讀取這些屬性。此外,它還會觸發表單在屬性更改時可以訂閱的事件(以防您需要實時更新)。

+0

單身人士模式被視爲反模式很多這些天,所以我不會推薦使用它。 – 2010-05-24 18:41:34

+1

你應該總是使用適合你的東西。 – bitbonk 2010-05-24 18:42:11

1

最簡單的方法:在Form2上公開一個屬性。在屬性的設置器中,設置文本框的值。我相信計時器事件在UI線程上觸發,所以你不應該有任何線程安全問題。如果你這樣做,你將不得不回到Brian上面提到的公共事件方法。

請記住,您可能還必須執行DoEvents()以使UI實際更新爲用戶。另外請記住,這種更新本質上會減慢應用程序的處理速度。

public int TimerValue 
{ 

    set 
    { 
     this.txtTextBox.Text = string.Format("{0:0000}", value); 

    } 
} 
0

只要讓你的計時器成爲一個公共事件,以便它可以在另一個表單上引用。

0

實現定時器形式INotifyPropertyChanged,並且定義表示計數的公共屬性:

private int count; 
public int Count 
{ 
    get { return count; } 
    set 
    { 
     if (count != value) 
     { 
      count = value; 
      OnPropertyChanged("Count"); 
     } 
    } 
} 

然後,文本框形式,其綁定到你的文本框的文本價值的計時器形式的Count屬性。

textbox.DataBindings.Add("Text", timerForm, "Count");