【WPF】窗体页面间传值总结
以下方法可以根据需求进行变更,
Demo1:子窗体返回值给主窗体
From1
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
//注册事件
frm.TransfEvent += frm_TransfEvent;
frm.ShowDialog();
}
//事件处理方法
void frm_TransfEvent(string value)
{
textBox1.Text = value;
}
Form2:
//声明委托 和 事件
public delegate void TransfDelegate(String value);
public event TransfDelegate TransfEvent;
private void button1_Click(object sender, EventArgs e)
{
TransfEvent(textBox1.Text);//触发事件
this.Close();
}
===================================================================================================================================
Demo2:主窗体通过触发事件传值给子窗体
Form1:
private void btn_Pass(object sender, RoutedEventArgs e){
Demo d = new Demo("想要传输的数据");
d.WindowStartupLocation = WindowStartupLocation.CenterScreen; //使窗口位置在最中心、
d.Owner = this;
d.Show();
}
Form2:
public Window2(string str){
InitializeComponent();
show(str);
}
public void show(string s)
{
textbox1.Text = s;
}
=============================================================================================
Demo3:主窗体传输给子窗体(实时)
参考例子:http://www.cnblogs.com/codeToUp/p/5371062.html
Form1
private void Button_Click(object sender, RoutedEventArgs e){
Win4 detail = new Win4();
SendMsgEvent += detail.MainFormTxt;//为子窗体注册事件,在子窗体中事件处理代码中设置文本
detail.Owner = this;
detail.Show();
}
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
SendMsgEvent(this, new Class1() { Text = "传输的值" });
}
Form2
internal void MainFormTxtChanedDetailRequest(Object sender, EventArgs e)
{
Class1 arg = e as Class1; //取到主窗体的传来的文本
textbox2.Text= arg.Text;
}
Class1:
public class Class1 : EventArgs
{
public string Text { get; set; }
}