Votre classe ne doit pas modifier le formulaire.
Toutefois, vous pouvez créer un délégué ou un événement dans votre classe et laisser votre classe déclencher cet événement lorsqu'une action doit être effectuée. Votre formulaire peut attacher un eventhandler à cet événement et exécuter l'action appropriée.
Par exemple:
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);
}
}
}
}
Et, dans votre formulaire, vous faites ceci:
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 = " ... ";
}
Lorsque vous voulez transmettre des données de votre classe à votre formulaire, vous pouvez utiliser du délégué générique EventHandler et créez votre propre classe EventArgs, qui contient les informations dont votre formulaire a besoin.
public class MyEventArgs : EventArgs
{
public string SomeData
{ get;
private set;
}
public MyEventArgs(string s)
{
this.SomeData = s;
}
}
Alors biensur, vous devrez utiliser le générique eventhandler dans votre classe, et transmettre les données appropriées dans le constructeur de votre propre classe EventArgs. Dans eventhandler, vous pouvez ensuite utiliser ces données.
Ceci est similaire à: http://stackoverflow.com/questions/717454/accessing-class-members-with-invoke-from-a-different-thread-in-c, http://stackoverflow.com/ questions/717264/c-accédant-forme-membres-d'une autre-classe, http://stackoverflow.com/questions/717074/how-to-access-form-objects-from-another-cs-file-in- c – Groo
Ouais ils sont similaires mais ils ne m'aident pas vraiment. Merci pour l'aide cependant, j'espère que quelqu'un peut jeter une réponse bientôt. – OneShot