国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#窗體間通訊的幾種處理方法

2019-11-17 03:03:16
字體:
供稿:網(wǎng)友
C#窗體間通訊的幾種處理方法

應(yīng)用程序開發(fā)中,經(jīng)常需要多窗體之間進(jìn)行數(shù)據(jù)通信,寫幾個(gè)例子,把幾種常用的通信方式總結(jié)一下:

主窗體Form1是一個(gè)ListBox,單擊選中某列時(shí),彈出窗體Form2,F(xiàn)orm2中兩個(gè)控件,一個(gè)是TextBox,顯示選中的該列的文本,另一個(gè)是按鈕,點(diǎn)擊時(shí)將修改后的值回傳,且在Form1中修改相應(yīng)的列的文本,同時(shí)Form2關(guān)閉。

方法一:傳值

最先想到的,F(xiàn)orm2構(gòu)造函數(shù)中接收一個(gè)string類型參數(shù),即Form1中選中行的文本,將Form2的TextBox控件的Text設(shè)置為該string,即完成了Form1向Form2的傳值。當(dāng)Form2的AcceptChange按鈕按下,需要修改Form1中ListBox中相應(yīng)列的值,因此可以考慮同時(shí)將Form1中的ListBox控件當(dāng)參數(shù)也傳入Form2,所有修改工作都在Form2中完成,根據(jù)這個(gè)思路,F(xiàn)orm2代碼如下:C#代碼收藏代碼
  1. publicpartialclassForm2:Form
  2. {
  3. PRivatestringtext;
  4. privateListBoxlb;
  5. privateintindex;
  6. //構(gòu)造函數(shù)接收三個(gè)參數(shù):選中行文本,ListBox控件,選中行索引
  7. publicForm2(stringtext,ListBoxlb,intindex)
  8. {
  9. this.text=text;
  10. this.lb=lb;
  11. this.index=index;
  12. InitializeComponent();
  13. this.textBox1.Text=text;
  14. }
  15. privatevoidbtnChange_Click(objectsender,EventArgse)
  16. {
  17. stringtext=this.textBox1.Text;
  18. this.lb.Items.RemoveAt(index);
  19. this.lb.Items.Insert(index,text);
  20. this.Close();
  21. }
  22. }

Form1中new窗體2時(shí)這么寫:

C#代碼收藏代碼
  1. publicpartialclassForm1:Form
  2. {
  3. intindex=0;
  4. stringtext=null;
  5. publicForm1()
  6. {
  7. InitializeComponent();
  8. }
  9. privatevoidlistBox1_SelectedIndexChanged(objectsender,EventArgse)
  10. {
  11. if(this.listBox1.SelectedItem!=null)
  12. {
  13. text=this.listBox1.SelectedItem.ToString();
  14. index=this.listBox1.SelectedIndex;
  15. //構(gòu)造Form2同時(shí)傳遞參數(shù)
  16. Form2form2=newForm2(text,listBox1,index);
  17. form2.ShowDialog();
  18. }
  19. }

OK,方法一的解決方法就是這樣,好處是直觀,需要什么就傳什么,缺點(diǎn)也是顯而易見的,如果窗體1中需要修改的是一百個(gè)控件,難道構(gòu)造的時(shí)候還傳100個(gè)參數(shù)進(jìn)去?況且如果其他窗體仍然需要彈Form2,那Form2就廢了,只能供窗體1使用,除非寫重載的構(gòu)造函數(shù),不利于代碼的復(fù)用,繼續(xù)看下一個(gè)方法。

方法二:繼承這個(gè)方法我試了很多次,繼承的確可以做,但是麻煩不說,還不方便,因此個(gè)人認(rèn)為如果為了互相操作數(shù)據(jù)而使用繼承,是不合適的,但既然是個(gè)方法,就扔出來看看,實(shí)際作用≈0。Form2:C#代碼收藏代碼
  1. //聲明Form2繼承于Form1
  2. publicpartialclassForm2:Form1
  3. {
  4. publicintindex;
  5. publicListBoxlb;
  6. publicForm2(stringtext)
  7. {
  8. //將繼承過來的listBox設(shè)置為不可見
  9. this.listBox1.Visible=false;
  10. InitializeComponent();
  11. this.textBox1.Text=text;
  12. }
  13. privatevoidbtnChange_Click(objectsender,EventArgse)
  14. {
  15. stringtext=this.textB
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 云南省| 凤庆县| 阳原县| 区。| 洛浦县| 德江县| 金塔县| 金沙县| 宽城| 台江县| 安多县| 沙河市| 苏尼特右旗| 滦平县| 宁远县| 康马县| 张家界市| 红原县| 长岭县| 镇巴县| 铜梁县| 竹山县| 科技| 辉县市| 怀柔区| 桐乡市| 郸城县| 鄯善县| 肥东县| 沂水县| 山东| 定州市| 宁波市| 长泰县| 金湖县| 手机| 青冈县| 丹江口市| 靖江市| 贵溪市| 海南省|