成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解WinForm窗體間交互的方法

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

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

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

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

  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)起來很簡單,只是想改變窗體的標題文本,就把整個主窗體的引用都傳遞給子窗體,這樣的方式不是很幽雅,我們用接口來改進上面的方法,這樣可以限制暴露給子窗體的功能,降低窗體之間的耦合度:

  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.    } 

原文標題: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邊框不同形式的設置技巧   

 

責任編輯:彭凡 來源: 博客園
相關(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-09-07 06:48:13

C#透明窗體

2009-07-24 11:29:33

WinForm表單窗體

2025-02-17 03:00:00

WinForm應用程序線程

2009-09-07 05:10:52

C#模式窗體

2009-08-26 11:07:36

C#打印窗體

2024-08-20 08:05:14

WinformWndProc?Windows

2024-10-24 17:13:55

WinformUI多線程

2009-04-13 09:23:41

.NET 2.0Winform經(jīng)驗

2010-08-31 09:46:23

C#

2009-11-26 14:37:37

Visual Stud

2009-10-10 14:54:44

treeView1控件

2025-02-10 07:05:00

WinFormUI線程

2011-06-30 17:21:56

Qt 線程 共享
點贊
收藏

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

主站蜘蛛池模板: 本道综合精品 | 91视频亚洲 | 美女久久久久久久久 | 欧美一区不卡 | 久久久av中文字幕 | 青春草91| 欧美日韩在线成人 | 日韩精品一区二区三区中文在线 | 国产成人av一区二区三区 | 一区二区三区视频在线观看 | 中文字幕在线一区 | 一区二区在线免费观看 | 国产成人精品一区二区三区在线 | 久久久精品影院 | 伊人伊成久久人综合网站 | 国产精品乱码一二三区的特点 | 国产精品久久国产精品 | 五月天综合网 | 国产乱码精品一区二区三区五月婷 | 国产精品视频在线播放 | 青青久久| 欧美在线一区二区视频 | 日韩精品一区二区在线 | 自拍偷拍亚洲视频 | 亚洲激情综合 | 九色91视频 | 做a的各种视频 | 日韩中文在线视频 | 免费观看一级毛片 | 欧美在线一区二区三区 | 99久久影院| 日本免费一区二区三区 | 91超碰caoporn97人人| 国产高清美女一级a毛片久久w | a级毛片国产 | 日韩在线免费视频 | 婷婷综合网 | 亚洲精品一区二区三区在线 | 久久久久久www | 黄色国产视频 | 毛片网站在线观看视频 |