C# 窗体c→类b→窗体a→a的方法 应该怎么设计
C# 窗体c→类b→窗体a→a的方法 应该如何设计
问题如下:
两个WinForm窗体FormA、FormC,一个类ClassB,
FormA中有一个自动更新数据的方法Refresh();
要实现的是:FormA程序运行就打开,FormC通过调用ClassB,使得FormA执行Refresh()方法;
请问该这么设计;
单纯的FormB执行FormA通过委托可以实现;但是FormC→ClassB→FormA→Refresh()执行
谢谢。
------解决方案--------------------
窗体将委托传给类,类通过调用委托更新另一个窗体。
------解决方案--------------------
看的有点糊涂啊,首先A和C是同一个application吗?
我默认是一个application作为前提
1.classB 建立一个事件eb,并且B做一个全局的实例,这个实例在formA中挂接eb事件,当这个eb事件触发的时候,就refresh frmA。
2.classB中建立一个public 方法pf,这个方法被调用就触发eb事件
3.frmC中调用pf方法
over
------解决方案--------------------
你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新的实例了,直接用传入的实例。
------解决方案--------------------
就是简单的把委托给ClassB就好了撒。
有时间,可以看下观察者模式。
------解决方案--------------------
其实退一步不用委托, 有个简单的方法:你要实现FormcC--->classB------>FormA------->refresh()
1.在FormA中定义一个全局静态变量 static theFormA
2.在FormA 构造函数中初始化 theFormA=this
3.在FormC中调用类ClassB
4 在 ClassB中直接用 FormA.theFormA.refresh();
ok
------解决方案--------------------
这很简单吧。LZ 你的这个调用还要用到委托?最简单明了的方法就是改变FORM的构建函数,让它可以传参就行了。
FormC→ClassB→FormA→Refresh()
FormC (Form formA)
{
ClassB b=new ClassB(fromA)
}
ClassB(Form formA)
{
formA.Refresh
}
当然还可以将它FormA做成属性放到FormC里。
问题如下:
两个WinForm窗体FormA、FormC,一个类ClassB,
FormA中有一个自动更新数据的方法Refresh();
要实现的是:FormA程序运行就打开,FormC通过调用ClassB,使得FormA执行Refresh()方法;
请问该这么设计;
单纯的FormB执行FormA通过委托可以实现;但是FormC→ClassB→FormA→Refresh()执行
谢谢。
------解决方案--------------------
窗体将委托传给类,类通过调用委托更新另一个窗体。
------解决方案--------------------
看的有点糊涂啊,首先A和C是同一个application吗?
我默认是一个application作为前提
1.classB 建立一个事件eb,并且B做一个全局的实例,这个实例在formA中挂接eb事件,当这个eb事件触发的时候,就refresh frmA。
2.classB中建立一个public 方法pf,这个方法被调用就触发eb事件
3.frmC中调用pf方法
over
------解决方案--------------------
你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新的实例了,直接用传入的实例。
------解决方案--------------------
就是简单的把委托给ClassB就好了撒。
有时间,可以看下观察者模式。
------解决方案--------------------
其实退一步不用委托, 有个简单的方法:你要实现FormcC--->classB------>FormA------->refresh()
1.在FormA中定义一个全局静态变量 static theFormA
2.在FormA 构造函数中初始化 theFormA=this
3.在FormC中调用类ClassB
4 在 ClassB中直接用 FormA.theFormA.refresh();
ok
------解决方案--------------------
这很简单吧。LZ 你的这个调用还要用到委托?最简单明了的方法就是改变FORM的构建函数,让它可以传参就行了。
FormC→ClassB→FormA→Refresh()
FormC (Form formA)
{
ClassB b=new ClassB(fromA)
}
ClassB(Form formA)
{
formA.Refresh
}
当然还可以将它FormA做成属性放到FormC里。