首页 > 代码库 > WinFrm窗体的传值方式

WinFrm窗体的传值方式

比较简单的方法:

一: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窗体的传值方式