在C#中,我如何使用委托来操作我制作的自定义类中的表单?

时间:2009-04-28 09:05:13

标签: c# class delegates callback

我知道如何从Form上操作Form上的文本框,但我不知道如何将文本框从它自己的文件中的CLASS操作到Form。

有人可以向我解释我将如何写代表&一个CallBack所以我可以简单地从一个不同文件中的类调用一个方法,并从另一个表单中更改文本框中的内容?

我不知道如何更好地解释这一点。谢谢你的帮助!

1 个答案:

答案 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类的构造函数。 在事件处理程序中,您可以使用此数据。