L_K_LK 2017-10-06 07:25 采纳率: 100%
浏览 2463
已采纳

C#委托来调用窗体的控件

Form1类里的代码
public Class1 cla;
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
cla.run1();
}
private void Form1_Load(object sender, EventArgs e)
{
cla = new Class1(this,LK);
}

    void LK()
    {
        button1.Text = "abc";
    }

Form2类里的代码
public Class1 cla;
void ds()
{
this.button1.Text = "def";
}
private void button1_Click(object sender, EventArgs e)
{
cla = new Class1(this, ds);
cla.run2();
}

Class1类里的代码
public delegate void Del1();
public Del1 _del1;
public Class1(Form1 f1, Del1 del)
{
this._del1 = del;
}
public delegate void Del2();
public Del2 _del2;
public Class1(Form2 f2, Del2 del)
{
this._del2 = del;
}

    public void run1()
    {
        Thread th = new Thread(a);
        th.Start();

    }

    public void run2()
    {
        Thread th = new Thread(b);
        th.Start();

    } 

    public void a()
    {
        try
        {
            _del1();//不为空,可以执行
        }
        catch (Exception e) 
        {
            MessageBox.Show("a中的方法:\n"+e.ToString ());
        }
    }
    public void b()
    {
        try
        {
            _del1();//问题在这,这里委托的方法为空,为什么,上面的怎么不为空?
            _del2();
        }
        catch (Exception e)
        {
            MessageBox.Show("b中的方法:\n" + e.ToString());
        }
    }

问题:在Class1 类里(有注释)。很急,求各位大神帮帮忙。
问题的要义就是在自定义的类里新起一条线程来调用窗体的控件,我是通过委托的方法执行,但在传这个方法(需要委托的方法)的参数时,在Class1的构造方法中检验是可以传进来的,但调用的时候就为空了。

再次求各位大神帮帮忙。

  • 写回答

3条回答 默认 最新

  • compbookjunkie 2017-10-06 12:57
    关注

    因为你创建了两个不同的名字都是cla的实例
    第一次创建时用了第一个构造函数把参数赋值给_del1
    第二次创建时用的第二个构造函数,把传进的delegate赋值给了_del2,而没有给_del1赋值,所以_del1为空

    如果验证通过,请标记为满意答案吧,等着用C币,谢谢了

    public delegate void Del1();
     public Del1 _del1;
     public Class1(Form1 f1, Del1 del)
     {
     this._del1 = del;
     }
     public delegate void Del2();
     public Del2 _del2;
     public Class1(Form2 f2, Del2 del)
     {
     this._del2 = del;   **这里需要给_del1赋值**
     }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)