看的有点糊涂啊,首先A和C是同一个application吗?
我默认是一个application作为前提1.classB 建立一个事件eb,并且B做一个全局的实例,这个实例在formA中挂接eb事件,当这个eb事件触发的时候,就refresh frmA。
2.classB中建立一个public 方法pf,这个方法被调用就触发eb事件
3.frmC中调用pf方法over

解决方案 »

  1.   

    按照二楼的说法,谢了如下代码:
        public class ClassB
        {
            public delegate void Form2Handle(string s);
            public event Form2Handle changed;        public void refresh()
            {
                changed("");
            }
        }FormA中代码是:
            private void Refresh(string s)
            {
                this.textBox1.Text = "aaa";
            }
            private void FormA_Load(object sender, EventArgs e)
            {
                ClassB classb = new ClassB();
                classb.changed += new ClassB.Form2Handle(Refresh);
            }
    FormC中执行ClassB中调用委托的代码是:
            private void buttonRefresh_Click(object sender, EventArgs e)
            {
                ClassB classb = new ClassB();
                classb.refresh();
            }点击buttonRefresh_Click,执行的结果是:ClassB中 错误" 未将对象引用设置到对象的实例。"changed 是null;
    因为两个窗体中都定义了ClassB,这肯定会报错的;那该如何写呢。
      

  2.   

    你3楼的问题是FormA和FormC中的ClassB用完就都销毁了。也就是FormA和FormC中用到的ClassB的实例不是同一个。感觉ClassB有点多余,如果没有其它用处可以省略。
    直接把Event和Delegate定义在FormC里,当FormC打开时,订阅Event。例如:
    private void FormA_Load(object sender, EventArgs e)
            {
                FormC formC = new FormC();
                formC.changed += new formC.Form2Handle(Refresh);
                formC.ShowDialog();// 或者其他函数显示
            }如果ClassB有其他用处,需要定义ClassB到FormA的类成员。初始化FormC的时候吧ClassB的实例传到FormC中。然后FormC中不用new ClassB新的实例了,直接用传入的实例。
      

  3.   

    就是简单的把委托给ClassB就好了撒。
    有时间,可以看下观察者模式。
      

  4.   

    其实退一步不用委托, 有个简单的方法:你要实现FormcC--->classB------>FormA------->refresh()
     1.在FormA中定义一个全局静态变量   static theFormA
    2.在FormA 构造函数中初始化  theFormA=this
    3.在FormC中调用类ClassB 
    4 在 ClassB中直接用 FormA.theFormA.refresh();
    ok
      

  5.   

    这很简单吧。LZ 你的这个调用还要用到委托?最简单明了的方法就是改变FORM的构建函数,让它可以传参就行了。
    FormC→ClassB→FormA→Refresh()FormC (Form formA)
    {
    ClassB b=new ClassB(fromA)
    }ClassB(Form formA)
    {
    formA.Refresh
    }当然还可以将它FormA做成属性放到FormC里。