从两个窗体传值说开去

       自己学编程也一段时间了,但是一直没有在网络上写什么文章。前段时间一直都在研究窗体间传值的问题,在这期间得到了一些感悟,现在和大家分享一下。或许会比较肤浅,还请大家见谅。更请各路老鸟指出错误和建议。

       有做过窗体间传值的就知道,窗体间传值的方法不下下面这几种:

1、  公开控件属性;

2、  传递窗体对象或控件的引用;

3、  使用委托。

但是不知道大家是否发现了一个本质不变的东西,那就是无论是何种方法,都是通过在实例中获取对方实力的全部或者部分的引用。并以此来操纵或者获取对方的数据。由此我们可以闭上眼睛,想象一下:在内存区的堆中有这样两个存储区,分别存储着两个窗体对象。每个窗体对象各有自己的属性、方法和事件。不妨假设要获取数据的是subForm窗体,提供数据是mianForm窗体。由于subFormmainForm是两个独立的实体,它们各自没有相应的联系通道。为此,我们是否应该为它们创建这样一个条件呢?

由此,我们在subForm窗体中添加一个到mainForm窗体的引用。该引用就成为了连接两个窗体的通道。通过这个通道,subForm窗体就可以操控mainForm窗体中的数据了。下面我们创建mainFormsubForm两个窗体:

public delegate string GetText();

public delegate void SetText(string text);

class MainForm :form

{

              SubForm subForm;

              public MainForm()

              {

                     InitializeComponent();

}

             

        /// <summary>

        /// 用于子窗体修改主窗体的值,提供给子窗体控制主窗体的操作

        /// </summary>

        /// <param name="text">从子窗体中获取的值</param>

        private void SetTextValue(string text)

        {

            tbText.Text = text;

        }

 

        /// <summary>

        ///用于子窗体从主窗体中获取值

        /// </summary>

        /// <returns>子窗体从主窗体中获取的值</returns>

        private string GetTextValue()

        {

            return tbText.Text;

        }

 

        private void btnOK_Click(object sender, EventArgs e)

        {

            //通过委托来进行两个窗体的互操作

                     //传递给子窗体的引用,以此建立两窗体间的联系

            //subForm = new SubForm(this.GetTextValue, this.SetTextValue);

 

            //通过给子窗体传递主窗体对象的引用来建立联系

            subForm = new SubForm(this);

 

            subForm.ShowDialog();

        }

}

 

class SubForm : Form

{

        private GetText getTextValue = null;

        private SetText setTextValue = null;

 

        private MainForm mainForm = null;

        public SubForm(GetText getText,SetText setText)

        {

            InitializeComponent();

            this.getTextValue = getText;

            this.setTextValue = setText;

            this.tbText.Text = this.getTextValue();

        }

 

        public SubForm(MainForm mainForm)

        {

            InitializeComponent();

            this.mainForm = mainForm;

        }

 

        private void btnOK_Click(object sender, EventArgs e)

        {

            this.setTextValue(this.tbText.Text);

        }

 }

       上面是通过委托和传递对象引用来实现的。但是其思想却是一样的——通过对象引用来实现对象间的互操作。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值