窗體間傳遞數據

前言

  做項目的時候,winfrom因為沒有B/S的緩存機制,窗體間傳遞數據沒有B/S頁面傳遞數據那么方便,今天我們就說下winfrom中窗體傳值的幾種方式。

共有字段傳遞

  共有字段傳遞實現起來很方便,就是在窗體類中加個共有字段屬性:

復制代碼
1         public string Msg
2         {
3             get 
4             {
5                 return this.textBox1.Text.Trim();
6             }
7         }
復制代碼

  調用代碼:

復制代碼
1         public Form2(Form1 f1)
2         {
3             InitializeComponent();
4             this.label1.Text = f1.Msg;
5         }
復制代碼

  就這么簡單,共有字段傳遞其實只是一種可以傳遞數據的方式,但不希望采用這種方式,除非一些窗體是要做傳值的,比如一些信息彈窗,可以采用這種方式。

構造傳遞

  構造傳遞一般是我們做項目常用的一種,就像對象傳值一樣,我們只要在構造方法中添加參數即可。

復制代碼
 1         public Form2(string msg)
 2         {
 3             InitializeComponent();
 4             this.label1.Text = msg;
 5         }
 6 
 7         private void button1_Click(object sender, EventArgs e)
 8         {
 9             Form2 f2 = new Form2(this.textBox1.Text.Trim());  //調用
10             f2.Show();
11         }
復制代碼

委托與事件傳遞

  上面說的兩種方式都是由父窗體傳值給子窗體,還有一種方式是子窗體傳值給子船體,這種方式一般采用委托和事件傳遞,我們來做個示例看下。

  我們先建一個委托,參數是string:

1     public delegate void selectChangedHandler(string s);

  在傳值中我們需要第二種方式來傳遞一個對象集合,首先我們建一個數據傳遞集合:

復制代碼
 1     public class CallObject
 2     {
 3         public string callMessage = "";
 4         public event selectChangedHandler selectChangedEvent;
 5 
 6         public void callEvent(string s)
 7         {
 8             this.selectChangedEvent(s);
 9         }
10     }
復制代碼

  集合包含兩個部分,一個是返回信息對象,一個是事件對象,這些其實以便子窗體調用來得到從子窗體中傳遞過來的數據,事件定義好了就得有事件處理方法:

1         public void co_selectChangedEvent(string s)
2         {
3             this.txtF2Select.Text = s;
4         }

  我們看下父窗體的調用方法:

復制代碼
1         private void btnCallForm2_Click(object sender, EventArgs e)
2         {
3             CallObject co = new CallObject();
4             co.selectChangedEvent+=new selectChangedHandler(co_selectChangedEvent);
5             Form2 f2 = new Form2(co);
6 
7             f2.ShowDialog();
8             txtEventResult.Text = "Form2傳的信息:" + co.callMessage;
9         }
復制代碼

  這邊主要是給事件注冊,從父窗體中我們就可以推斷出,子窗體是怎么調用的,通過構造方法得到對象集合,然后觸發事件就可以了。

復制代碼
 1         private CallObject co;
 2         public Form2(CallObject cov):this()
 3         {
 4             this.co = cov;
 5         }
 6 
 7         private void rb_A_CheckedChanged(object sender, EventArgs e)
 8         {
 9             co.callEvent("A");
10         }
復制代碼

  運行效果:

  下面傳值給父窗體的值需要關閉子窗體,父窗體再可以得到,上面的可以實時傳遞。

  程序下載:窗體間傳遞數據.rar

  附錄:小菜學習編程-Winform系列(初學者)

后記

  其實上面第一種并不能說是一種好的方式,就像說模式,常用并且可以解決問題的解決方案稱為模式,開門有幾種方式:拿鑰匙開門和撬門,我們常用的是第一種,并稱為一種開門模式,并不是說第二種就不是了,只不過我們不常用,適合一些特殊的情況,比如,忘記拿鑰匙了,就是這個意思。

?


本文轉自田園里的蟋蟀博客園博客,原文鏈接:http://www.cnblogs.com/xishuai/p/3549242.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540239.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉載] c語言中檢查命令行參數_C中的命令行參數

參考鏈接: Java中的命令行參數 c語言中檢查命令行參數 Command line argument is a parameter supplied to the program when it is invoked. Command line argument is an important concept in C programming. It is mostly used when you need to control your …

MySQL關閉Enterprise Server源碼

今天從MySQL官方網站上獲知,MySQL宣布關閉Enterprise Server的源碼,對于廣大開源愛好者來說,這是一個沉重的打擊。雖然免費的用戶群體一般僅僅使用MySQL Community Server(開源免費社區版),但關閉MySQL Ent…

[轉載] Java中Scanner用法總結

參考鏈接: Java之Scanner類 最近在做OJ類問題的時候,經常由于Scanner的使用造成一些細節問題導致程序不通過(最慘的就是網易筆試,由于sc死循環了也沒發現,導致AC代碼也不能通過。。。),因此對S…

os和shutil模塊

import os //os模塊基本實現了linux系統中所有的命令 os.system(終端命令):在終端執行命令 os.getcwd():獲取當前的工作路徑 os.chdir():修改工作路徑 os.chmod():修改權限 os.chown():修改屬主屬組 os.mkdir():創建單個目錄,當目錄存在時報異常&…

[轉載] JAVA語言程序設計(基礎篇)第十版課后題答案(第一章)

參考鏈接&#xff1a; Java中的Scanner和nextChar() JAVA語言程序設計&#xff08;基礎篇&#xff09;第十版課后題答案 第一章 第二題 /** Created by ysy on 2018/7/6. */ public class text2 { public static void main(String[] args){ for(int i 0; i < 5; i) Syste…

java.util.Date和java.sql.Date 一點區別

最近無意中發現&#xff0c;在oracle中同一樣的一個Date類型字段&#xff0c;存儲的日期格式有兩種不同的情況&#xff0c;第一種是2011-1-1 12:00:00&#xff0c;第二種是2011-1-1&#xff0c;仔細查找發現在向數據庫中寫數據的時候定義的變量的問題。 第一種是&#xff1a;ja…

[轉載] java中關于用\t格式輸出

參考鏈接&#xff1a; 用Java格式化輸出 看了好多人關于\t的用法&#xff0c;感覺找不到自己想要的答案&#xff0c;所以索性就自己輸出來看看&#xff0c;如圖&#xff1a;這樣可以一目了然的看出來&#xff0c;\t&#xff08;制表符&#xff09;的作用就是看前面輸出滿不滿8…

微信搶房軟件開發

2019獨角獸企業重金招聘Python工程師標準>>> 這兩年樓市真可謂是一個"火“字難以形容 經歷了長沙兩次開盤&#xff0c;都沒有搶到&#xff0c;目前還沒有買到房子&#xff0c;說說我的悲劇吧&#xff0c;讓大伙都開心開心 第一次搶房是今年4月份長沙萬科金域國…

[轉載] Java——數組習題

參考鏈接&#xff1a; Java從控制臺讀取輸入的方法 package chap02; import java.util.Scanner; /** * * author admin * date 2020-4-8 * description: * 題目內容&#xff1a; 編寫程序&#xff0c; 從控制臺讀取下面的信息&#xff0c; 每月按22天工作日計算&#xff0c;…

超全Linux備份工具集合,滿足你的所有需要!

經常備份計算機上的數據是個好的做法&#xff0c;它可以手動完成&#xff0c;也可以設置成自動執行。許多備份工具擁有不同的功能特性&#xff0c;讓用戶可以配置備份類型、備份時間、備份對象、將備份活動記入日志及執行更多操作。 1.Rsync這是一款在Linux用戶當中頗受歡迎的命…

[轉載] Java內存管理-你真的理解Java中的數據類型嗎(十)

參考鏈接&#xff1a; Java中的字符串類String 1 做一個積極的人 編碼、改bug、提升自己 我有一個樂園&#xff0c;面向編程&#xff0c;春暖花開&#xff01; 推薦閱讀 第一季 0、Java的線程安全、單例模式、JVM內存結構等知識梳理 1、Java內存管理-程序運行過程&#x…

Linux系統安全加固腳本

閑來無事&#xff0c;整理一個系統安全加固腳本&#xff0c;每個公司的要求不一樣&#xff0c;所以僅供參考&#xff1a; #!/bin/sh echo "00 */1 * * * /usr/sbin/ntpdate 192.168.1.1 >>/var/log/ntpdate.log" > mycrontab crontab mycrontab rm -rf my…

[轉載] 整理下java中stringBuilder和stringBuffer兩個類的區別

參考鏈接&#xff1a; Java中的StringBuffer類 StringBuilder和StringBuffer這兩個類在動態拼接字符串時常用&#xff0c;肯定比String的效率和開銷小&#xff0c;這是因為String的對象不會回收哦。 其實我一直用StringBuilder這個類&#xff0c;因為可以簡寫為sb的變量在程序…

11.13 模10計數器設計

.新建一個工程 Family&#xff1a;FLEX10K Available device&#xff1a;EPF10K20TC144-3 2.設置lpm_counter宏單元參數并連接引腳 連接引腳的時候要注意的是&#xff0c;向量線的連接。 3.時序仿真 檢查無誤后進行下一步 4.載入7448并進行引腳連接 5.分配管腳 再次編譯&#x…

[轉載] java對象在內存中的結構

參考鏈接&#xff1a; 了解Java中的類和對象 今天看到一個不錯的PPT&#xff1a;Build Memory-efficient Java Applications&#xff0c;開篇便提出了一個問題&#xff0c;在Hotspot JVM中&#xff0c;32位機器下&#xff0c;Integer對象的大小是int的幾倍&#xff1f; 我們…

使用valueOf前必須進行校驗

每個枚舉都是java.lang.Enum的子類,都可以訪問Enum類提供的方法,比如hashCode(),name(),valueOf()等..... 其中valueOf()方法會把一個String類型的名稱轉變為枚舉項,也就是枚舉項中查找出字面值與該參數相等的枚舉項,雖然這個方法很簡單,但是JDK卻做了一個對于開發人員來說并不…

[轉載] 【Java】Java基礎知識及其擴展筆記(8千字)

參考鏈接&#xff1a; Java中的StringBuilder類及其示例 Java基礎知識及其擴展筆記 零 l 寫在前面一 l JVM1、【1.1.2.1】java程序運行的一般流程2、【1.1.2.1】JVM一般運行流程3、【1.1.2.1】JIT&#xff08;just in time 即時編譯編譯器&#xff09;4、堆與棧 二 l Java …

多IDC GSLB的部署

之前已經介紹過GSLB的實現原理&#xff0c;這里再向大家講述一下GSLB經常遇到的部署方式&#xff0c;多IDC的部署。很多大型的企業或業務容災要求非常高的客戶都會部署有多個異地的數據中心&#xff0c;以保證其業務的“全天候”不間斷的正常運行&#xff0c;而要整合多個IDC的…

[轉載] Controller報錯:java.lang.NoSuchMethodException: java.util.List.<init>()

參考鏈接&#xff1a; Java8中的java.util.StringJoiner 報錯詳情&#xff1a; java.lang.NoSuchMethodException: java.util.List.<init>() 以及 No primary or default constructor found for interface java.util.List 示例&#xff1a; /** * 此接口會產生以…

[轉載] 算法競賽中的JAVA使用筆記

參考鏈接&#xff1a; Java中StringTokenizer類的示例| 1(構造函數) 算法競賽中的JAVA使用筆記 算法競賽中的JAVA使用筆記 輸入與輸出 基本輸入輸入掛輸出控制臺輸入輸出重定向到文件 大整數與高精度 大整數BigInteger高精度BigDecimal高精度開方 字符串與進制轉換 字符串基本…