winform利用委托传值到datagridview-ag凯发k8国际
ag凯发k8国际
收集整理的这篇文章主要介绍了
winform利用委托传值到datagridview_c# winform 跨多级窗体/控件传值
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
我们知道 c# winform 跨窗体传值,子父窗体交互一般用委托来实现。之前都是子窗体和父窗体两级交互,如果子窗体再生一个子子窗体,然后子子窗体调用父窗体函数,这样该如何操作?
我想到的实现方式还是用委托变量一级一级的往下传。
下面是实现的效果:
▲ form1 加载 uc1,在 uc1 下加载 uc2,uc2 下返回 uc1form1.cs
using system;using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.threading.tasks;
using system.windows.forms;
namespace windowsformsapp1
{
public partial class form1 : form
{
public form1()
{
initializecomponent();
this.usercontrol1.loaduserf2 = this.loadfrm;
this.usercontrol1.action = () => this.button1_click(null, null);
}
private usercontrol1 usercontrol1 = new usercontrol1() { dock = dockstyle.fill};
private void button1_click(object sender, eventargs e)
{
this.loadfrm(this.usercontrol1);
}
private void loadfrm(control control)
{
this.panel1.controls.clear();
this.panel1.controls.add(control);
}
}
}
usercontrol1.cs
using system;using system.collections.generic;
using system.componentmodel;
using system.drawing;
using system.data;
using system.linq;
using system.text;
using system.threading.tasks;
using system.windows.forms;
namespace windowsformsapp1
{
public partial class usercontrol1 : usercontrol
{
public usercontrol1()
{
initializecomponent();
// this.usercontrol2.backuc1 = this.action; // 放这里,结果都是 null
// 这个绑定不能放构造函数。因为构造函数执行的时候 action = null。
// 主窗体先构造好子窗体,然后再给子窗体 action 赋值。
// 所以,绑定要放在子窗体构造完毕之后。
}
private usercontrol2 usercontrol2 = new usercontrol2() { dock = dockstyle.fill };
public action loaduserf2;public action action;private void button1_click(object sender, eventargs e)
{this.loaduserf2?.invoke(this.usercontrol2);this.usercontrol2.backuc1 = this.action; // 在这绑定
}
}
}
usercontrol2.cs
using system;using system.collections.generic;
using system.componentmodel;
using system.drawing;
using system.data;
using system.linq;
using system.text;
using system.threading.tasks;
using system.windows.forms;
namespace windowsformsapp1
{
public partial class usercontrol2 : usercontrol
{
public usercontrol2()
{
initializecomponent();
}
public action backuc1;
private void button1_click(object sender, eventargs e)
{
backuc1?.invoke();
}
}
}
要注意的地方:
在 usercontrol1.cs 中的注释中说明。这里的委托绑定不能放在构造函数下,因为构造函数执行的时候 action = null。
主窗体先构造好子窗体,然后再给子窗体 action 赋值。所以,这里的绑定要放在子窗体构造完毕之后。
总结
以上是ag凯发k8国际为你收集整理的winform利用委托传值到datagridview_c# winform 跨多级窗体/控件传值的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: adg类似于mysql半同步机制_mys
- 下一篇: mysql 6.2使用_2. mysql