C# 从表单外部更新textInput
我有一个带有多行C# 从表单外部更新textInput,c#,forms,textinput,C#,Forms,Textinput,我有一个带有多行textInput的表单。我需要从表单外部的对象更新textInput的内容 我怎样才能做到这一点?我应该使用事件还是将textInput传递给外部对象的构造函数?我不会将文本传递给对象。如果只需要它作为初始化值,那么将文本传递给表单的构造函数就可以了。但并非相反 SomeFormClass form1 = new SomeFormClass(aString); form1.Show(); 非常简单的解决方案: 为表单提供一个公共SetTextValue(字符串文本)方法,用于
textInput
的表单。我需要从表单外部的对象更新textInput
的内容
我怎样才能做到这一点?我应该使用事件还是将
textInput
传递给外部对象的构造函数?我不会将文本传递给对象。如果只需要它作为初始化值,那么将文本传递给表单的构造函数就可以了。但并非相反
SomeFormClass form1 = new SomeFormClass(aString);
form1.Show();
非常简单的解决方案:
为表单提供一个公共SetTextValue(字符串文本)方法,用于设置文本
事件也可以工作,但对于这样一个简单的问题来说似乎有点力不从心。我不会将文本传递给对象。如果只需要它作为初始化值,那么将文本传递给表单的构造函数就可以了。但并非相反 非常简单的解决方案: 为表单提供一个公共SetTextValue(字符串文本)方法,用于设置文本
事件也会起作用,但对于这样一个简单的问题来说似乎有点力不从心。有很多方法可以实现这一点,具体取决于您所做的工作 是否从表单中更新文本字段
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");
如果不知道更多的细节,很难回答。根据您工作的具体情况,有很多方法可以实现这一点 是否从表单中更新文本字段
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");
不知道更多细节很难回答。看看MVP模式-您可以让表单实现IView接口。您的另一个对象将是Presenter,它将在某些内容发生更改时调用IView.UpdateText()(或者让您的视图订阅presenters事件-我更喜欢方法方法) 这将分离您的关注点,并使您的解决方案更易于测试,因为您可以模拟IView、IPresenter和IModel的实现 表单应该检查this.invokererequired==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 });
}
}看看MVP模式-您可以让表单实现IView接口。您的另一个对象将是Presenter,它将在某些内容发生更改时调用IView.UpdateText()(或者让您的视图订阅presenters事件-我更喜欢方法方法) 这将分离您的关注点,并使您的解决方案更易于测试,因为您可以模拟IView、IPresenter和IModel的实现 表单应该检查this.invokererequired==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 });
}
}谢谢您的回复。。。如何从外部对象获取对“Form1”对象的引用?您可以创建一个presenter(MVP)来更新表单。演示者在窗体的构造函数中获取窗体和“外部对象”(模型)的实例。演示者订阅模型上的某些事件。当相应的事件被触发时,演示者可以更新表单。感谢您的回复。。。如何从外部对象获取对“Form1”对象的引用?您可以创建一个presenter(MVP)来更新表单。演示者在窗体的构造函数中获取窗体和“外部对象”(模型)的实例。演示者订阅模型上的某些事件。当适当的事件被触发时,演示者可以更新表单。感谢您的回复,实际上我需要的是DataBings方法。但它不起作用,绑定应该放在哪里?我尝试将其放入表单的构造函数和_Load方法中,但没有成功。如果您想使用数据绑定,我将开始阅读以下内容:要使数据绑定控件在绑定到的对象发生更改时更新,该对象将需要实现INotifyPropertyChanged。感谢您的回答,实际上,我需要的是DataBings方法。但它不起作用,绑定应该放在哪里?我尝试将其放入表单的构造函数和_Load方法中,但没有成功。如果要使用数据绑定,我将从这里开始阅读:要使数据绑定控件在绑定到的对象发生更改时更新,该对象需要实现INotifyPropertyChanged。