WinForm窗体之间交互的一些方法

实际上过去我也写过类似的主题,这里把各种方法总结一下,内容的确基础了一些,所以这篇文章是写给刚刚学习C#的同行们的,希望对大家有些帮助吧!很抱歉,这篇文章没有诡异的bug来勾起大家的兴趣,但是下篇文章我会努力写些有趣的主题的!

窗体间传递数据的方法比较多:

  • 01

    在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把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;  //把子窗体的文本框值传递给主窗体的文本框! } }

  • 02

    我个人感觉上面的方法不是很好,虽然实现起来很简单,只是想改变窗体的标题文本,就把整个主窗体的引用都传递给子窗体,这样的方式不是很幽雅,我们用接口来改进上面的方法,这样可以限制暴露给子窗体的功能,降低窗体之间的耦合度: 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);  //通过接口来调用方法 } }

  • 03

    为了进一步降低窗体之间的耦合度,我们可以用委托来实现这个需求: 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(); } }

  • 04

    也可以在子窗体中定义一个自定义的事件,然后自定义一个事件参数,用来传递你想传递的一些信息: 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(); } }

(0)

相关推荐

  • 如何实现winform窗体的美化

    在用vs开发winform项目的时候,你是否为界面的外观过于单调而苦恼,业务功能做的再好,UI做的不好,用户体验还是会大打折扣. 那么有没有什么第三方的工具可以轻松实现winform窗体的美化呢?答案 ...

  • 使用WinForm窗体,制作一个简易的计算器。

    使用WinForm窗体,制作一个简易的计算器. 操作方法 01 1.案例:使用WinForm窗体,制作一个简易的计算器. .设计: 鼠标右点击:编辑项 02 2.输入,加-减-乘-除,字符. 03 3 ...

  • excel中计算两个日期之间相差天数的方法

    小编致力于为大家奉献最有效的,让大家能够解决掉问题,但是大家也都知道,每个人遇到的情况都是不一样的,大家在看小编的同时,除了跟随操作,也需要自己的思考,举一反三的解决问题,这样才会变得更加有内涵,成为 ...

  • 如何在Visual Studio中创建Winform窗体应用

    Winform窗体应用是大家经常遇到的软件类型,那么我们如何在Visual Studio中创建Winform窗体应用呢?下面小编给大家分享一下. 操作方法 01 打开Visual Studio软件,点 ...

  • Access中窗体下按钮的设计方法

    学习Access中窗体下按钮的设计方法 操作方法 01 首先,打开数据库文件. 02 在[开始]功能区的"窗体"面板中右击"fTest"窗体,选择"设 ...

  • 按ctrl+space无法在中文与英文之间切换的解决方法

    近日小编的电脑系统重装了,安装上搜狗拼音输入法后,使用以前常用按键“ctrl+space”切换中英文输入法状态,发现无法切换到英文输入状态。 小编从网上寻找解决方法时,发现很多网友都遇到这个问题,网上 ...

  • access窗体中组合框制作方法

    下图中我们看到就是一个组合框,组合框就像一个带有下拉按钮的文本框一样,但是点击下列按钮就可以打开一列选项,我们点击选项就可以迅速填充,即加快了我们录入数据的速度,也防止我们录入错误.下面我们就来建立一 ...

  • 两台iPhone之间传输视频的方法

    外出游玩时,经常会遇到拍到了好看的视频想要分享给朋友的情况吧.但是,在没有WiFi或流量很少的情况下,要如何传输视频呢? 本文将介绍无需网络,或者流量很少的情况下,也能在iPhone之间传输视频的两种 ...

  • Access窗体中控件的设置方法

    学习窗体中的控件创建的方法以及格式的设计方法. 操作方法 01 首先,打开数据库文件. 02 在[开始]功能区的"窗体"面板中右击"brow"窗体,选择&quo ...