Ваш класс не должен изменять форму.
Однако вы можете создать делегат или событие в своем классе, и пусть ваш класс поднимет это событие, когда необходимо предпринять какое-либо действие. Ваша форма может присоединить обработчик событий к этому событию и выполнить соответствующее действие.
Например:
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;
}
}
Тогда Offcourse, вы должны будете использовать общий EventHandler в своем классе, и передать соответствующие данные в конструктор собственного класса EventArgs. В этом случае вы можете использовать эти данные.
Это похоже на: http://stackoverflow.com/questions/717454/accessing-class-members-with-invoke-from-a-different-thread-in-c, http://stackoverflow.com/ вопросы/717264/c-accessing-form-members-from-another-class, http://stackoverflow.com/questions/717074/how-to-access-form-objects-from-another-cs-file-in- c – Groo
Да, они похожи, но они по-настоящему не помогают мне. Спасибо за помощь, хотя, надеюсь, кто-то может скоро ответить. – OneShot