我知道如何从Form上操作Form上的文本框,但我不知道如何将文本框从它自己的文件中的CLASS操作到Form。
有人可以向我解释我将如何写代表&一个CallBack所以我可以简单地从一个不同文件中的类调用一个方法,并从另一个表单中更改文本框中的内容?
我不知道如何更好地解释这一点。谢谢你的帮助!
答案 0 :(得分:3)
您的课程不应更改表格。
但是,您可以在班级中创建委托或事件,并在必须采取某些操作时让您的班级提升该事件。 您的表单可以将事件处理程序附加到此事件,并执行适当的操作。
例如:
class MyClass
{
public event EventHandler DoSomething;
public void DoWork()
{
// do some stuff
// raise the DoSomething event.
OnDoSomething(EventArgs.Empty);
}
protected virtual void OnDoSomething(EventArgs args )
{
// This code will make sure that you have no IllegalThreadContext
// exceptions, and will avoid race conditions.
// note that this won't work in wpf. You could also take a look
// at the SynchronizationContext class.
EventHandler handler = DoSomething;
if( handler != null )
{
ISynchronizeInvoke target = handler.Target as ISynchronizeInvoke;
if( target != null && target.InvokeRequired )
{
target.Invoke (handler, new object[]{this, args});
}
else
{
handler(this, args);
}
}
}
}
并且,在您的表单中,您执行此操作:
MyClass c = new MyClass();
c.DoSomething += new EventHandler(MyClass_DoSomething);
c.DoWork();
private void MyClass_DoSomething(object sender, EventArgs e )
{
// Manipulate your form
textBox1.Text = " ... ";
}
如果要将类中的某些数据传递给表单,则可以使用通用的EventHandler委托,并创建自己的EventArgs类,其中包含表单所需的信息。
public class MyEventArgs : EventArgs
{
public string SomeData
{ get;
private set;
}
public MyEventArgs( string s )
{
this.SomeData = s;
}
}
然后,你必须在你的类中使用通用的事件处理程序,并将适当的数据传递给你自己的eventargs类的构造函数。 在事件处理程序中,您可以使用此数据。