我有一张多行textInput
的表单。我需要从表单外部的对象更新textInput
的内容。
我怎样才能做到这一点?我应该使用事件,还是将textInput
传递给外部对象的构造函数?
答案 0 :(得分:1)
我不会将文本传递给对象。如果你只需要它作为初始化值,将文本传递给表单的构造函数就可以了。但不是其他方式。
非常简单的解决方案: 为表单提供一个公共SetTextValue(字符串Text)方法,用于设置文本。
事件也会起作用,但对于这样一个简单的问题似乎有点过分了。
答案 1 :(得分: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");
如果不了解更多细节,很难回答。
答案 2 :(得分:1)
看一下MVP模式 - 你可以让你的表单实现一个IView接口。你的另一个对象是Presenter,当事情发生变化时会调用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 });
}
}