2010-05-12 70 views
0

我有一個表格多行textInput。我需要從表單外的對象更新textInput的內容。更新文本輸入外部形式

我怎樣才能做到這一點?我應該使用事件,還是將textInput傳遞給外部對象的構造函數?

回答

1

看看MVP模式 - 你可以讓你的表單實現一個IView接口。你的另一個對象是當演示文稿發生變化時(或讓你的視圖訂閱演示者事件 - 我更喜歡使用方法的方法)時,演示者會調用例如IView.UpdateText()。

這可以分離您的疑慮並使您的解決方案更具可測性,因爲您可以模擬IView,IPresenter和IModel的實施。

表單應檢查this.InvokeRequired == true以確定傳入請求是否在UI線程上。如果不是,則需要使用委託。

public delegate void UpdateTextDelegate(string text); 

public void UpdateText(string text) 
{ 
    // Check we are on the right thread. 
    if (!this.InvokeRequired) 
    { 
     // Update textbox here 
    } 
    else 
    { 
     UpdateTextDelegate updateText = new UpdateTextDelegate(this.UpdateText); 

     // Executes a delegate on the thread that owns the control's underlying window handle. 
     this.Invoke(updateText, new object[] { text }); 
    } 

}

1

我不會將文本傳遞給對象。如果你只需要它作爲初始化值,將文本傳遞給表單的構造函數就沒問題。但不是其他方式。

非常簡單的解決方案: 給你的表單一個公共SetTextValue(字符串文本)方法,它設置文本。

事件也會起作用,但對於這樣一個簡單的問題似乎有點過分。

+0

感謝您的回覆...和我怎麼從外部對象到「Form1的」對象的引用? – xain 2010-05-12 16:03:17

+1

您可以創建演示者(MVP)來更新表單。演示者在構造函數中獲取表單的實例和「外部對象」(模型)。演示者訂閱模型上的某些事件。當適當的事件被觸發時,演示者可以更新表單。 – 2010-05-12 16:11:00

1

有很多方法來完成這取決於你正在工作的細節。

更新窗體內的文本字段?

txtField.Text = someObject.SomeProperty; 

在表單的構造函數中設置值?

SomeFormClass form1 = new SomeFormClass(aString); 
form1.Show(); 

從外部對象調用表單上的方法?

public void SetText(string text) { txtField.Text = text; } 

form1.SetText(aString); 

使用數據綁定?

txtField.DataBindings.Add(new Binding("Text", someObject, "SomeProperty"); 

如果不知道更多細節,很難回答。

+0

感謝您的回覆,實際上DataBindigs方法就是我所需要的。它不工作,綁定應該在哪裏?我試圖把它放在Form的構造器和_Load方法中,但沒有運氣。 – xain 2010-05-12 16:11:39

+1

如果你想使用數據綁定,我會從這裏開始閱讀:http://msdn.microsoft.com/en-us/library/c8aebh9k.aspx 對於數據綁定控件更新時,它綁定的對象更改該對象將需要實現INotifyPropertyChanged。 – 2010-05-12 16:33:18