【C#】winform子窗體與父窗體傳值,子窗體與子窗體傳值
阿新 • • 發佈:2019-02-18
【1】子窗體與父窗體傳值
【2】子窗體與子窗體傳值:
前提:Form1座位父窗體,然後它new出來了兩個個子窗體分別為Form2與Form3;
要求:可以及時把Form2中產生的資料,傳遞給Form3,更新Form3;如果Form3沒有被開啟,則不傳遞。
窗體設計:
Form1程式碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Test { public partial class Form1 : Form { Form3 f3; Form2 f2 = new Form2(); int i = 0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { f2.TitleChanged += f2_TitleChanged; f2.Show(); } void f2_TitleChanged(object sender, Form2.TitleChangedEventArgs e) { if (f3 != null) { f3.setText(e.Title); } } private void button2_Click(object sender, EventArgs e) { f3 = new Form3(); f3.Disposed += f3_Disposed; f3.Show(); } void f3_Disposed(object sender, EventArgs e) { f3 = null; } } }
Form2程式碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Test { public partial class Form2 : Form { public class TitleChangedEventArgs : EventArgs // 事件引數類 { private string title = ""; public string Title { get { return title; } set { title = value; } } } // 宣告委託 public delegate void TitleChangedEventHandler(object sender, TitleChangedEventArgs e); // 定義事件 public event TitleChangedEventHandler TitleChanged; public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { TitleChangedEventArgs e1 = new TitleChangedEventArgs(); e1.Title = textBox1.Text; OnTitleChanged(e1);// 觸發事件 } // 觸發事件的方法 protected virtual void OnTitleChanged(TitleChangedEventArgs e) { if (TitleChanged != null) TitleChanged(this, e); } } }
Form3程式碼:
總結:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Test { public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void Form3_Load(object sender, EventArgs e) { } public void setText(string s) { label1.Text = s; } } }
Form2與Form3不能直接傳值。 必須先將值傳到Form1中,然後Form1把值傳遞給Form3
By:Jim