萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> WinForm窗體之間交互介紹

WinForm窗體之間交互介紹

  我們在做程序的時候遇到WinForm窗體之間交互的問題,這裡把各種方法總結一下,內容比較確基礎,適合剛入門的初學者,下面我們就一起來看看吧!

  在窗體間傳遞數據的方法比較多:

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

  publicclassfrmMain:Form

  {

  ...

  frmControlcontrolForm=newfrmControl(this);

  controlForm.Show();

  }

  publicclassfrmControl:Form//子窗體,用來控制主窗體的某些顯示!

  {

  privatefrmMainmainForm;

  publicfrmControl(frmMainmainForm)

  {

  this.mainForm=mainForm;

  }

  privatevoidbutton1_Click(objectsender,EventArgse)

  {

  frmMain.textBox1.Text=this.textBox1.Text;//把子窗體的文本框值傳遞給主窗體的文本框!

  }

  }

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

  publicinterfaceIChangeTitle:

  {

  voidChangeTitle(stringtitle);

  }

  publicclassfrmMain:Form,IChangeTitle

  {

  ...

  frmControlcontrolForm=newfrmControl(this);

  controlForm.Show();

  publicvoidChangeTitle(stringtitle)

  {

  this.Text=title;

  }

  }

  publicclassfrmControl:Form//子窗體,用來控制主窗體的某些顯示!

  {

  privateIChangeTitleichangeTitle;

  publicfrmControl(IChangeTitleichangeTitle)

  {

  this.ichangeTitle=ichangeTitle;

  }

  privatevoidbutton1_Click(objectsender,EventArgse)

  {

  ichangeTitle.ChangeTitle(this.textBox1.Text);//通過接口來調用方法

  }

  }

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

  publicpartialclassChildForm:Form

  {

  publicdelegatevoidTitleChangedHandler(stringtitle);

  publicTitleChangedEventHandlerTitleChanged;

  publicChildForm()

  {

  InitializeComponent();

  }

  privatevoidbtn_Ok_Click(objectsender,EventArgse)

  {

  if(TitleChanged!=null)

  TitleChanged("TestTitle");//委托調用

  }

  }

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

  publicpartialclassMainForm:Form

  {

  privateChildFormloginForm=newChildForm();

  publicMainForm()

  {

  InitializeComponent();

  loginForm.TitleChanged=newChildForm.TitleChangedEventHandler(FormTitleChanged);

  }

  protectedvoidFormTitleChanged(stringtitle)

  {

  this.Text=title;

  }

  privatevoidbutton1_Click(objectsender,EventArgse)

  {

copyright © 萬盛學電腦網 all rights reserved