如何实现WinForm窗体间交互
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍如何实现WinForm窗体间交互,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在窗体间传递数据的方法比较多:1,在子窗体中自定义一个构造函数,参数类型是主窗体,
千家信息网最后更新 2026年11月02日如何实现WinForm窗体间交互
这篇文章主要介绍如何实现WinForm窗体间交互,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
在窗体间传递数据的方法比较多:
1,在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就明白了:
public class frmMain:Form { ... frmControl controlForm=new frmControl(this); controlForm.Show(); } public class frmControl:Form //子窗体,用来控制主窗体的某些显示! { private frmMain mainForm; public frmControl(frmMain mainForm) { this.mainForm=mainForm; } private void button1_Click(object sender,EventArgs e) { frmMain.textBox1.Text=this.textBox1.Text; //把子窗体的文本框值传递给主窗体的文本框! } }2,我个人感觉上面的方法不是很好,虽然实现起来很简单,只是想改变窗体的标题文本,就把整个主窗体的引用都传递给子窗体,这样的方式不是很幽雅,我们用接口来改进上面的方法,这样可以限制暴露给子窗体的功能,降低窗体之间的耦合度:
public interface IChangeTitle: { void ChangeTitle(string title); } public class frmMain:Form,IChangeTitle { ... frmControl controlForm=new frmControl(this); controlForm.Show(); public void ChangeTitle(string title) { this.Text=title; } } public class frmControl:Form //子窗体,用来控制主窗体的某些显示! { private IChangeTitle ichangeTitle; public frmControl(IChangeTitle ichangeTitle) { this.ichangeTitle=ichangeTitle; } private void button1_Click(object sender,EventArgs e) { ichangeTitle.ChangeTitle(this.textBox1.Text); //通过接口来调用方法 } }3,为了进一步降低窗体之间的耦合度,我们可以用委托来实现这个需求:
public partial class ChildForm : Form { public delegate void TitleChangedHandler(string title); public TitleChangedEventHandler TitleChanged; public ChildForm() { InitializeComponent(); } private void btn_Ok_Click(object sender, EventArgs e) { if (TitleChanged != null) TitleChanged("Test Title"); //委托调用 } }主窗体给委托变量赋值就可以了:
public partial class MainForm : Form { private ChildForm loginForm = new ChildForm(); public MainForm() { InitializeComponent(); loginForm.TitleChanged = new ChildForm.TitleChangedEventHandler(FormTitleChanged); } protected void FormTitleChanged(string title) { this.Text = title; } private void button1_Click(object sender, EventArgs e) { loginForm.Show(); } }4,也可以在子窗体中定义一个自定义的事件,然后自定义一个事件参数,用来传递你想传递的一些信息:
public partial class ChildForm : Form { public class TitleChangedEventArgs : EventArgs //事件参数类 { private string title = ""; public string Title { get { return title; } set { title = value; } } } public delegate void TitleChangedEventHandler(object sender, TitleChangedEventArgs e); public event TitleChangedEventHandler TitleChanged; public ChildForm() { InitializeComponent(); } private void btn_Ok_Click(object sender, EventArgs e) { TitleChangedEventArgs e1=new TitleChangedEventArgs(); e1.Title="Login sucessed"; OnTitleChanged(e1);//触发事件 } protected virtual void OnTitleChanged(TitleChangedEventArgs e) //触发事件的方法 { if (TitleChanged != null) TitleChanged(this, e); } }主窗体订阅这个事件就可以了:
public partial class MainForm : Form { private ChildForm loginForm = new ChildForm(); public MainForm() { InitializeComponent(); loginForm.TitleChanged += new ChildForm.TitleChangedEventHandler(FormTitleChanged); } protected void FormTitleChanged(object sender, ChildForm.TitleChangedEventArgs e) { this.Text = e.Title; } private void button1_Click(object sender, EventArgs e) { loginForm.Show(); } }以上是"如何实现WinForm窗体间交互"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
窗体
事件
方法
参数
文本
委托
之间
内容
函数
接口
篇文章
耦合度
面的
控制
耦合
幽雅
个人
价值
信息
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国互联网科技股
金融科技还是互联网
中国 科技 互联网
青岛互联网科技公司
互联网科技小贷
北京互联网络科技有限公司
南京欣网互联网科技
米客互联网科技
人人互联网科技是培训
互联网汽车科技小镇
团飞科技与伯堂互联网服务平台
互联网科技教育视频
贵州叶脉互联网科技有限公司所属行业
晓花互联网科技有限公司网址
想开互联网科技公司怎么样
允成互联网科技有限公司融资
互联网科技资金流入
富国互联网金融科技混合基金
厦门江牛科技互联网
福建互联网展示科技馆设计
互联网科技有限公司
广州万易互联网科技有限公司
华中科技大学互联网
科技互联网创业计划书
互联网科技公司名称
国外互联网科技网站
汉立互联网科技有限公司联系电话
厦门千工互联网科技有限公司
众安科技工业互联网合作
21世纪互联网科技成就