父子窗口传递数据
為什么80%的碼農都做不了架構師?>>> ??
父子窗口傳遞數據主要通過屬性和委托完成。
對話框主要分為模態和非模態兩種對話框。本文參考http://bbs.csdn.net/topics/360140208一文實現這個功能。
父窗口
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 WindowsFormsApplication1 {public partial class MainForm : Form{public MainForm(){InitializeComponent();}private MyDialog m_dlg;private void toolStripButton1_Click(object sender, EventArgs e){MyDialog dlg = new MyDialog(richTextBox1.Text);if (dlg.ShowDialog() == DialogResult.OK){richTextBox1.Text = dlg.TextBoxValue;}}private void toolStripButton2_Click(object sender, EventArgs e){if (m_dlg == null){m_dlg = new MyDialog(richTextBox1.Text);m_dlg.TextBoxChanged += new EventHandler((sender1, e1) =>{ richTextBox1.Text = m_dlg.TextBoxValue; });m_dlg.FormClosed += new FormClosedEventHandler((sender2, e2) => { m_dlg = null; });m_dlg.Show(this);}else{m_dlg.Activate();}}} }
子窗口
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 WindowsFormsApplication1 {public partial class MyDialog : Form{public event EventHandler TextBoxChanged;public string TextBoxValue {get { return textBox1.Text; }set { textBox1.Text = value; } }public MyDialog() : this("") { }public MyDialog(string Param){InitializeComponent();TextBoxValue = Param;}private void textBox1_TextChanged(object sender, EventArgs e){if (TextBoxChanged != null)TextBoxChanged(this, e);}private void button1_Click(object sender, EventArgs e){Close();}} }
模態傳值的方法是:傳入時可以使用構造函數,傳出的時候首先判斷是否用戶是通過確定關閉的,如果是,那么用屬性傳出。這個做法也是框架庫的做法,比如打開文件對話框。
非模態的情況略微復雜:因為我們需要主窗體能和子窗體實時交互,為了同步主窗體和子窗體的數據,我們用了事件。有人問了,為什么我們不能讓子窗體直接操作主窗體,這是因為考慮到對話框可以被重用,如果讓它直接操作主窗口那么就限制死了這個子窗口只能被某個特定的主窗口調用。為了解除子窗體對調用者的耦合,我們使用事件。如果子窗體已經被顯示,主窗體再次調用子窗體,那么通常我們希望激活子窗體而不是再顯示一個。
?參考資料
http://bbs.csdn.net/topics/360140208?
轉載于:https://my.oschina.net/871120/blog/512799
總結
- 上一篇: Android——apk反编译
- 下一篇: Windows 驱动发展基金会(九)内核