日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解WinForm窗體間交互的方法

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

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比天等網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式天等網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋天等地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。

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

1,在子窗體中自定義一個(gè)構(gòu)造函數(shù),參數(shù)類型是主窗體,當(dāng)要顯示子窗體的時(shí)候,就用這個(gè)構(gòu)造函數(shù)來實(shí)例化子窗體,然后把this指針傳進(jìn)去,說起來太抽象了,我大概一寫大家應(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,我個(gè)人感覺上面的方法不是很好,雖然實(shí)現(xiàn)起來很簡(jiǎn)單,只是想改變窗體的標(biāo)題文本,就把整個(gè)主窗體的引用都傳遞給子窗體,這樣的方式不是很幽雅,我們用接口來改進(jì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.    }

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

 
 
 
  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.   private void btn_Ok_Click(object sender, EventArgs e)
  11.        {            
  12.            if (TitleChanged != null)
  13.                TitleChanged("Test Title"); //委托調(diào)用
  14.            
  15.        }
  16.    }

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

 
 
 
  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.         protected void FormTitleChanged(string title)
  10.         {
  11.             this.Text = title;
  12.         }
  13.         private void button1_Click(object sender, EventArgs e)
  14.         {
  15.             loginForm.Show();
  16.         }
  17.     }

4,也可以在子窗體中定義一個(gè)自定義的事件,然后自定義一個(gè)事件參數(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.         private void btn_Ok_Click(object sender, EventArgs e)
  26.         {
  27.             TitleChangedEventArgs e1=new TitleChangedEventArgs();
  28.             e1.Title="Login sucessed";
  29.             OnTitleChanged(e1);//觸發(fā)事件
  30.             
  31.         }
  32. protected virtual void OnTitleChanged(TitleChangedEventArgs e)   //觸發(fā)事件的方法
  33.         {
  34.             if (TitleChanged != null)
  35.                 TitleChanged(this, e);
  36.         }
  37.     }

主窗體訂閱這個(gè)事件就可以了:

 
 
 
  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.  protected void FormTitleChanged(object sender, ChildForm.TitleChangedEventArgs e)
  10.        {
  11.            this.Text = e.Title;
  12.        }
  13.        private void button1_Click(object sender, EventArgs e)
  14.        {
  15.            loginForm.Show();
  16.        }
  17.    }

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


當(dāng)前名稱:詳解WinForm窗體間交互的方法
鏈接地址:http://www.dlmjj.cn/article/ccchhep.html