自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解WinForm窗體間交互的方法

開發(fā) 后端
本文將為大家介紹的是WinForm窗體之間的數(shù)據(jù)交互等問題,包括自定義一個構(gòu)造函數(shù)等等問題。

實際上過去我也寫過類似的主題,這里把各種方法總結(jié)一下,內(nèi)容的確基礎(chǔ)了一些,所以這篇文章是寫給剛剛學(xué)習(xí)C#的同行們的,希望對大家有些幫助吧!很抱歉,這篇文章沒有詭異的bug來勾起大家的興趣,但是下篇文章我會努力寫些有趣的主題的

在窗體間傳遞數(shù)據(jù)的方法比較多:

1,在子窗體中自定義一個構(gòu)造函數(shù),參數(shù)類型是主窗體,當(dāng)要顯示子窗體的時候,就用這個構(gòu)造函數(shù)來實例化子窗體,然后把this指針傳進去,說起來太抽象了,我大概一寫大家應(yīng)該就明白了:

  1. public class frmMain:Form  
  2.   {  
  3.        ...  
  4.        frmControl controlForm=new frmControl(this);  
  5.        controlForm.Show();  
  6.    }  
  7.    public class frmControl:Form  //子窗體,用來控制主窗體的某些顯示!  
  8.    {  
  9.         private frmMain mainForm;  
  10.         public frmControl(frmMain mainForm)  
  11.         {  
  12.              this.mainForm=mainForm;  
  13.          }  
  14.          private void button1_Click(object sender,EventArgs e)  
  15.               {                        
  16. frmMain.textBox1.Text=this.textBox1.Text;  //把子窗體的文本框值傳遞給主窗體的文本框!  
  17.               }  
  18.     } 

2,我個人感覺上面的方法不是很好,雖然實現(xiàn)起來很簡單,只是想改變窗體的標(biāo)題文本,就把整個主窗體的引用都傳遞給子窗體,這樣的方式不是很幽雅,我們用接口來改進上面的方法,這樣可以限制暴露給子窗體的功能,降低窗體之間的耦合度:

  1. public interface IChangeTitle:  
  2.  {  
  3.       void ChangeTitle(string title);  
  4.   }  
  5.  public class frmMain:Form,IChangeTitle  
  6.  {  
  7.       ...  
  8.       frmControl controlForm=new frmControl(this);  
  9.       controlForm.Show();  
  10.       public void ChangeTitle(string title)  
  11.       {  
  12.            this.Text=title;  
  13.        }          
  14.   }  
  15.   public class frmControl:Form  //子窗體,用來控制主窗體的某些顯示!  
  16.   {  
  17.        private IChangeTitle ichangeTitle;  
  18.        public frmControl(IChangeTitle ichangeTitle)  
  19.        {  
  20.             this.ichangeTitle=ichangeTitle;  
  21.         }  
  22.         private void button1_Click(object sender,EventArgs e)  
  23.              {  
  24. ichangeTitle.ChangeTitle(this.textBox1.Text);  //通過接口來調(diào)用方法  
  25.  
  26.              }  
  27.  
  28.    } 

3,為了進一步降低窗體之間的耦合度,我們可以用委托來實現(xiàn)這個需求:

  1. public partial class ChildForm : Form  
  2.    {  
  3.  public delegate void TitleChangedHandler(string title);  
  4.   public TitleChangedEventHandler TitleChanged;  
  5.    public ChildForm()  
  6.        {  
  7.            InitializeComponent();  
  8.        }  
  9.  
  10.          
  11.   private void btn_Ok_Click(object sender, EventArgs e)  
  12.        {              
  13.            if (TitleChanged != null)  
  14.                TitleChanged("Test Title"); //委托調(diào)用  
  15.              
  16.        }  
  17.    } 

主窗體給委托變量賦值就可以了:

  1. public partial class MainForm : Form  
  2.     {  
  3.         private ChildForm loginForm = new ChildForm();   
  4.         public MainForm()  
  5.         {  
  6.             InitializeComponent();  
  7. loginForm.TitleChanged = new ChildForm.TitleChangedEventHandler(FormTitleChanged);  
  8.         }  
  9.  
  10.         protected void FormTitleChanged(string title)  
  11.         {  
  12.             this.Text = title;  
  13.         }  
  14.  
  15.         private void button1_Click(object sender, EventArgs e)  
  16.         {  
  17.             loginForm.Show();  
  18.         }  
  19.     } 

4,也可以在子窗體中定義一個自定義的事件,然后自定義一個事件參數(shù),用來傳遞你想傳遞的一些信息:

  1. public partial class ChildForm : Form  
  2.     {  
  3.         public class TitleChangedEventArgs : EventArgs //事件參數(shù)類  
  4.         {  
  5.             private string title = "";  
  6.             public string Title  
  7.             {  
  8.                 get 
  9.                 {  
  10.                     return title;  
  11.                 }  
  12.                 set 
  13.                 {  
  14.                     title = value;  
  15.                 }  
  16.             }  
  17.         }  
  18. public delegate void TitleChangedEventHandler(object sender, TitleChangedEventArgs e);  
  19.         public event TitleChangedEventHandler TitleChanged;  
  20.         public ChildForm()  
  21.         {  
  22.             InitializeComponent();  
  23.         }  
  24.  
  25.           
  26.         private void btn_Ok_Click(object sender, EventArgs e)  
  27.         {  
  28.             TitleChangedEventArgs e1=new TitleChangedEventArgs();  
  29.             e1.Title="Login sucessed";  
  30.             OnTitleChanged(e1);//觸發(fā)事件  
  31.               
  32.         }  
  33. protected virtual void OnTitleChanged(TitleChangedEventArgs e)   //觸發(fā)事件的方法  
  34.         {  
  35.             if (TitleChanged != null)  
  36.                 TitleChanged(this, e);  
  37.         }  
  38.     } 

主窗體訂閱這個事件就可以了:

  1. public partial class MainForm : Form  
  2.    {  
  3.        private ChildForm loginForm = new ChildForm();   
  4.        public MainForm()  
  5.        {  
  6.            InitializeComponent();  
  7. loginForm.TitleChanged += new ChildForm.TitleChangedEventHandler(FormTitleChanged);  
  8.        }  
  9.  
  10.  protected void FormTitleChanged(object sender, ChildForm.TitleChangedEventArgs e)  
  11.        {  
  12.            this.Text = e.Title;  
  13.        }  
  14.  
  15.        private void button1_Click(object sender, EventArgs e)  
  16.        {  
  17.            loginForm.Show();  
  18.        }  
  19.    } 

原文標(biāo)題:WinForm窗體之間交互的一些方法

鏈接:http://www.cnblogs.com/xuefeng1982/archive/2010/06/11/1756620.html

[[11967]]

【編輯推薦】

  1. 探討WPF開發(fā)工作站相關(guān)知識
  2. WPF Dispatcher在界面操作中作用體現(xiàn)
  3. 實現(xiàn)WPF淡入效果方式技巧分享
  4. WPF Listbox生成方式介紹
  5. WPF邊框不同形式的設(shè)置技巧   

 

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-09-07 03:44:50

C#窗體間傳值

2024-07-03 08:21:56

MDI窗體界面

2009-09-01 18:16:41

C#窗體間通訊

2009-12-31 16:56:40

Silverlight

2009-10-13 11:32:19

Winform假框架

2009-10-14 15:11:28

VB6.0實現(xiàn)多窗體交

2009-11-30 08:38:35

WinForm

2009-07-24 11:29:33

WinForm表單窗體

2009-09-07 06:48:13

C#透明窗體

2025-02-17 03:00:00

WinForm應(yīng)用程序線程

2009-09-07 05:10:52

C#模式窗體

2009-08-26 11:07:36

C#打印窗體

2009-04-13 09:23:41

.NET 2.0Winform經(jīng)驗

2024-10-24 17:13:55

WinformUI多線程

2010-08-31 09:46:23

C#

2024-08-20 08:05:14

WinformWndProc?Windows

2025-02-10 00:14:00

2009-09-07 06:18:57

C#窗體設(shè)計器

2009-12-28 14:32:31

WPF窗體對話框

2009-04-28 16:18:29

.Net MicroSideShow
點贊
收藏

51CTO技術(shù)棧公眾號