C# Winform 跨多级窗体/控件传值
2021/9/27 9:11:20
本文主要是介绍C# Winform 跨多级窗体/控件传值,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我们知道 C# winform 跨窗体传值,子父窗体交互一般用委托来实现。之前都是子窗体
和父窗体
两级交互,如果子窗体
再生一个子子窗体
,然后子子窗体
调用父窗体
函数,这样该如何操作?我想到的实现方式还是用委托变量
一级一级的往下传。下面是实现的效果:
Form1.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<Control> 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
赋值。所以,这里的绑定要放在子窗体构造完毕之后。
这篇关于C# Winform 跨多级窗体/控件传值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#