两个子窗体间的传值和函数调用

折磨了一天半的难题终于解决了,趁热打铁写出来给有同样困惑的小伙伴们参考一下!

首先,问题描述:有三个窗体,MainForm(父窗体)、CataForm(子窗体)、TextForm(子窗体),在CataForm窗体中要点击一个控件执行操作得出一个string,然后需要把这个string传给TextForm,并执行刷新函数(把string传给控件,更新控件内容)!

问题难点分析:CataForm 和TextForm都是在MainForm里new出来的唯一窗体,所以要在CataForm窗体里给TextForm传值或是调用其方法是不能通过new一个TextForm的(自然,给TextForm弄个public属性这个方法就得pass了),那static呢?不好意思TextForm的刷新函数里有个控件的使用,所以static的方法也就pass了。

解题思路:CataForm和TextForm之间唯一的关联就只剩下:它们都是MainForm的子窗体(找到突破口了)。***委托(或事件)***,这就是救星,有木有!!!在CataForm里定义一个public委托,在MainForm里new完CataForm之后就给CataForm的委托帮上一个方法Send(string),这个方法的作用就是把string传给TextForm,然后在CataForm里得到string的时候调用委托,这样一来:CataForm得到string------->执行MainForm方法Send(string)--------->TextForm得到string,刷新内容!

贴代码:(代码中我使用的是事件,你懂得!)

class MainForm

{

CataForm cata = new CataForm();

TextForm text = new TextForm();

public MainForm(){}

private void MainForm_Load(object sender, EventArgs e)

{

cata.Path += new CataForm.PathEventHandler(Send); //事件注册,直接就把cata中得到的path传到Send()了。

}

private void Send(string paht)

{

text.Path = path;

}

}

class CataForm

{

public delegate void PathEventHandler(string path);
public event PathEventHandler Path;

private void xxx()

{

计算或者……得到了path这个东东。

if(Path != null)

{

Path(path);

}
}
}

class TextForm

{

private string path = "";

public string Path

{

get{return path;};

set{

path = value;

Refresh(path); //为了实现自动刷新,我就把刷新函数放这儿了,不知道好不好?

}

}


private void Refresh(string path)

{

path值都来了,你就随便用吧!

}


}

这样,调用CataForm中的xxx(),TextForm中的控件内容就直接刷新了!


第一次写博客,不知道思路是否清晰,小伙伴们谅解!!!


已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页