【转】WinForm窗体间数据交互的方法
生活随笔
收集整理的這篇文章主要介紹了
【转】WinForm窗体间数据交互的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在窗體間傳遞數據的方法比較多:
1.在子窗體中自定義一個構造函數,參數類型是主窗體,當要顯示子窗體的時候,就用這個構造函數來實例化子窗體,然后把this指針傳進去,說起來太抽象了,我大概一寫大家應該就明白了:
public class frmMain:Form { ... frmControl controlForm=new frmControl(this); controlForm.Show(); } public class frmControl:Form //子窗體,用來控制主窗體的某些顯示! { private frmMain mainForm; public frmControl(frmMain mainForm) { this.mainForm=mainForm; } private void button1_Click(object sender,EventArgs e) { frmMain.textBox1.Text=this.textBox1.Text; //把子窗體的文本框值傳遞給主窗體的文本框! } }?2,我個人感覺上面的方法不是很好,雖然實現起來很簡單,只是想改變窗體的標題文本,就把整個主窗體的引用都傳遞給子窗體,這樣的方式不是很幽雅,我們用接口來改進上面的方法,這樣可以限制暴露給子窗體的功能,降低窗體之間的耦合度:
public interface IChangeTitle: { void ChangeTitle(string title); } public class frmMain:Form,IChangeTitle { ... frmControl controlForm=new frmControl(this); controlForm.Show(); public void ChangeTitle(string title) { this.Text=title; } } public class frmControl:Form //子窗體,用來控制主窗體的某些顯示! { private IChangeTitle ichangeTitle; public frmControl(IChangeTitle ichangeTitle) { this.ichangeTitle=ichangeTitle; } private void button1_Click(object sender,EventArgs e) { ichangeTitle.ChangeTitle(this.textBox1.Text); //通過接口來調用方法 } }?3.為了進一步降低窗體之間的耦合度,我們可以用委托來實現這個需求:
public partial class ChildForm : Form { public delegate void TitleChangedHandler(string title); public TitleChangedEventHandler TitleChanged; public ChildForm() { InitializeComponent(); } private void btn_Ok_Click(object sender, EventArgs e) { if (TitleChanged != null) TitleChanged("Test Title"); //委托調用 } }?主窗體給委托變量賦值就可以了:
public partial class MainForm : Form { private ChildForm loginForm = new ChildForm(); public MainForm() { InitializeComponent(); loginForm.TitleChanged = new ChildForm.TitleChangedEventHandler(FormTitleChanged); } protected void FormTitleChanged(string title) { this.Text = title; } private void button1_Click(object sender, EventArgs e) { loginForm.Show(); } }?4.也可以在子窗體中定義一個自定義的事件,然后自定義一個事件參數,用來傳遞你想傳遞的一些信息:
public partial class ChildForm : 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 ChildForm() { InitializeComponent(); } private void btn_Ok_Click(object sender, EventArgs e) { TitleChangedEventArgs e1=new TitleChangedEventArgs(); e1.Title="Login sucessed"; OnTitleChanged(e1);//觸發事件 } protected virtual void OnTitleChanged(TitleChangedEventArgs e) //觸發事件的方法 { if (TitleChanged != null) TitleChanged(this, e); } }?主窗體訂閱這個事件就可以了:
public partial class MainForm : Form { private ChildForm loginForm = new ChildForm(); public MainForm() { InitializeComponent(); loginForm.TitleChanged += new ChildForm.TitleChangedEventHandler(FormTitleChanged); } protected void FormTitleChanged(object sender, ChildForm.TitleChangedEventArgs e) { this.Text = e.Title; } private void button1_Click(object sender, EventArgs e) { loginForm.Show(); } }?
?轉自:http://www.xueit.com/cshare/show-7027-1.aspx
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/magic-cube/archive/2012/01/07/2315712.html
總結
以上是生活随笔為你收集整理的【转】WinForm窗体间数据交互的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [恢]hdu 1028
- 下一篇: WP7之题样式与数据绑定