下面我实现一个最简单的页面传值功能,相信初学者能一看就明白。
点击打开按扭,打开传输值窗体
1 public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 public void getValue(string strV) 9 { 10 this.textBox1.Text = strV; 11 } 12 13 private void button1_Click(object sender, EventArgs e) 14 { 15 Form2 frm = new Form2(); 16 //frm.fatherform = this;//将当前窗体赋给fatherform 17 //frm.getTextHandler += new Form2.GetTextHandler(getValue);//给事件赋值(注意:GetText方法的参数必须与GetTextHandler委托的参数一样,方可委托) 18 frm.getTextHandler = getValue;//将方法赋给委托对象 19 frm.ShowDialog(); 20 } 21 }
输入值后点击传输按扭,'value'将显示在接收值窗体的TextBox上
1 public partial class Form2 : Form 2 { 3 public Form2() 4 { 5 InitializeComponent(); 6 } 7 //public Form1 fatherform; 8 9 public delegate void GetTextHandler(string text);//声明委托 10 // public event GetTextHandler getTextHandler = null;//定义委托事件 11 public GetTextHandler getTextHandler;//委托对象 12 private void button1_Click(object sender, EventArgs e) 13 { 14 //if (fatherform != null) 15 //{ 16 // fatherform.getValue(this.textBox1.Text.Trim()); 17 // this.Close(); 18 //} 19 if (getTextHandler != null) 20 { 21 getTextHandler(this.textBox1.Text.Trim()); 22 this.Close(); 23 } 24 } 25 }
这里主要为大家呈现了两种传值方式:
一、将Form1窗体传给fatherform对象,随后我们就可以在Form2中操作Form1了。
二、使用委托,将getValue方法赋给事件或委托对象getTextHandler,那么实现getValue操作就不用自己去做了因为已经委托给getTextHandler,直接调用getTextHandler即可
参考出处:http://www.cnblogs.com/pfcan66/archive/2012/09/12/2680596.html
===================================================================
再来看几个传值的方法,有如下几种方式,其中主要讲讲事件订阅传值的形式。
1. 声明个全局变量,就是App.xaml里面声明;在所有窗体里面都可以引用 Application.Current.Properties["ArgumentName"];
2. 第二个就是 在目标窗体上面公开个 属性,直接赋值;
3. 最后就是在Uri里面传参数 NavigationService.Navigate(window object,argument value)
4. 采用事件响应,传递值。
举例:点击主窗口MainWindow 上的一个OpenSubWindow按钮 -> 打开子窗口SubWindow -> 在子窗口中的TextBox中输入值, 点击OK后关闭 -> 主窗口上的TextBox获取子窗口中的值。
1. 在子窗口中定义一个事件PassValuesEvent。 当点击 OK 按钮时,触发事件,并传递数值。( PassValuesEventArgs 是EventArgs类,需要同时定义好)
public partial class SubWindow : Window { public delegate void PassValuesHandler(object sender, PassValuesEventArgs e); public event PassValuesHandler PassValuesEvent; public SubWindow() { InitializeComponent(); } private void btnOK_Click(object sender, RoutedEventArgs e) { string value1 = tbValue1.Text; // Text Property return value is string type . int value2; Int32.TryParse(tbValue2.Text, out value2); PassValuesEventArgs args = new PassValuesEventArgs(value1, value2); PassValuesEvent(this, args); this.Close(); } }
2. 在主窗口中的OpenSubWindow按钮点击的方法中,订阅了PassValuesEvent事件。当事件触发时,获取传递的参数的值。
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnOpenSubWindow_Click(object sender, RoutedEventArgs e) { SubWindow subWindow = new SubWindow(); // 订阅事件 subWindow.PassValuesEvent += new SubWindow.PassValuesHandler(ReceiveValues); subWindow.Show(); } private void ReceiveValues(object sender, PassValuesEventArgs e) { this.tbValue1.Text = e.Value1; this.tbValue2.Text = e.Value2.ToString(); } }
主要说明:子窗口的PassValuesEvent事件,是从PassValuesHandler代理的一个实例对象并且被定义成event类型,所以在其他类里就可以订阅这个事件了。
参考出处:http://www.cnblogs.com/fdyang/archive/2013/03/25/2980451.html