码迷,mamicode.com
首页 > Windows程序 > 详细

WinFrm窗体的传值方式

时间:2016-11-08 01:19:59      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:点击   return   元素属性   ret   forms   设置   send   子窗体   extc   

比较简单的方法:

一:1.定义两个窗体

2.在父窗体中加入子窗体的属性

   public ChildFrm ChildFrm { get; set; }

 3.加载的时候:

 private void ParentFrm_Load(object sender, EventArgs e)
{
         ChildFrm frm = new ChildFrm();
            ChildFrm = frm;   
           frm.Show();
}

 4.点击的时候(把子窗体的属性改成公有的):

对象内部的字段或者元素属性最好不要直接让外部直接访问(通过设置的方法来控制)

  public System.Windows.Forms.TextBox txtMsg;
ChildFrm.txtMsg.Text = this.txtMsg.Text;

 第二种方法:(提供一个方法)

private ChildFrm ChildFrm { get; set; }

 子窗体中提供一个方法为:

 public void SetText(string txt)
        {
            this.txtMsg.Text = txt;
        }

 父窗体点击的时候:

ChildFrm.SetText(this.txtMsg.Text); 

 第三种:发布订阅模式和观察者模式

父窗体:定义发布消息的委托

 public Action<string> AfterMsgSend { get; set; }

  委托方式传值

if (AfterMsgSend == null)
  {
       return;
  }

   AfterMsgSend(this.txtMsg.Text);

 子窗体弹出来之前,关注主窗体消息的变化:(委托的方式)

AfterMsgSend += frm.SetText;

 第四种方法:(事件的方法)

定义消息发布的事件:

 public event EventHandler AfterMsgChangeEvent;

 定义一个子类继承EventArgs:

  public class TextBoxMsgChangeEventArg :EventArgs
    {
        public string Text { get; set; }
    }

 触发事件:

AfterMsgChangeEvent(this, new TextBoxMsgChangeEventArg() { Text = this.txtMsg.Text });

  拿到父窗体的传来的文本

 public void AfterParentFrmTextChange(object sender, EventArgs e)
        {
            TextBoxMsgChangeEventArg arg = e as TextBoxMsgChangeEventArg;
            this.SetText(arg.Text);
        }

 事件的方法:

 AfterMsgChangeEvent += frm.AfterParentFrmTextChange;

 事件和委托的区别:

1.委托是一个类型   事件是委托的特殊实例

2.事件的触发只能在类的内部触发(相对安全)

3.委托实例和事件时有可比性的

 

WinFrm窗体的传值方式

标签:点击   return   元素属性   ret   forms   设置   send   子窗体   extc   

原文地址:http://www.cnblogs.com/sunliyuan/p/6040902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!