1.子窗體事件刷新父窗體界面值
子窗體定義委托和事件
//聲明一個委托 public delegate void DisplayUpdateDelegate(string str); //聲明事件 public event DisplayUpdateDelegate ShowUpdate; private void Form2_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { if (ShowUpdate != null) { ShowUpdate(textBox1.Text.ToString()); } }
父窗體
private void button3_Click(object sender, EventArgs e) { Form2 _frm2 = new Form2(); _frm2.ShowUpdate += new Form2.DisplayUpdateDelegate(ShowMessage); _frm2.Show(); } private void ShowMessage(string str) { textBox1.Text = str; }
2.父窗體的事件刷新子窗體的值
父窗體代碼
public delegate void ChangeSonWindowDelegate(string str); ChangeSonWindowDelegate _changeSonWindow; private void button1_Click(object sender, EventArgs e) { Form2 _frm2 = new Form2(); _changeSonWindow = new ChangeSonWindowDelegate(_frm2.ShowMessage); _frm2.Show(); } private void button2_Click(object sender, EventArgs e) { _changeSonWindow(textBox1.Text); }
子窗體代碼
public void ShowMessage(string str) { textBox1.Text = str; }
3.父窗體調用子窗體的方法。子窗體一定得是顯示狀態。
父窗體
Form2 _frm; private void button1_Click(object sender, EventArgs e) { timer1.Interval = 5000; timer1.Enabled = true; _frm = new Form2(); _frm.ShowDialog(); } private void timer1_Tick(object sender, EventArgs e) { _frm.WriteLog("調用子窗體方法2222"); }
子窗體
public void WriteLog(string str) { Console.WriteLine(str); }
4.子窗體值->父窗體
父窗體
private void button1_Click(object sender, EventArgs e) { Form2 myFrm = new Form2(); if(myFrm.ShowDialog()==DialogResult.OK) { string boyName = myFrm.BoyName; int age = myFrm.Age; } }
子窗體
private string _boyName; private int _age; public string BoyName { get => _boyName; set => _boyName = value; } public int Age { get => _age; set => _age = value; } private void button1_Click(object sender, EventArgs e) { BoyName = "jim"; Age = 18; this.DialogResult = DialogResult.OK; }
5.跳出子窗體,在子窗體上實時顯示信息
父窗體
ShowRunning(true);
ShowRunningMsg("正在掃描中,請耐心等待......");
關閉子窗體 ShowRunning(false);
private delegate void ShowRunningDelegate(bool isShow); private void ShowRunning(bool isShow) { ShowRunningDelegate _showRunning = new ShowRunningDelegate(ShowRunningMethod); this.Invoke(_showRunning, new object[] { isShow}); } FrmRunning _FrmRunning; public delegate void ShowRunningMsgDelegate(string msg); ShowRunningMsgDelegate ShowRunningMsg; private void ShowRunningMethod(bool isShow) { if (isShow) { _FrmRunning = new FrmRunning(); ShowRunningMsg = new ShowRunningMsgDelegate(_FrmRunning.ShowRuningMsg); _FrmRunning.Show(); } else { if (_FrmRunning != null) { _FrmRunning.Close(); } } }
子窗體
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 BlueToothATE { public partial class FrmRunning : Form { public FrmRunning() { InitializeComponent(); } private void FrmRunning_Load(object sender, EventArgs e) { } public void ShowRuningMsg(string msg) { lblMsg.Text = msg; } } }