欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# Winform窗口之間傳值的多種方法淺析

 更新時(shí)間:2015年04月10日 10:29:07   投稿:junjie  
這篇文章主要介紹了C# Winform窗口之間傳值的多種方法淺析,本文起講解了通過(guò)構(gòu)造器傳值、通過(guò)屬性傳遞、通過(guò)事件攜帶參數(shù)傳遞等方法,需要的朋友可以參考下

摘要

一般的工程都是多個(gè)form組成的,各個(gè)窗體之間經(jīng)常要靈活的傳遞數(shù)據(jù)。下面分享一點(diǎn)自己的經(jīng)驗(yàn):

窗體傳值的方法有很多,下面僅介紹我用過(guò)的一些,不知道官方叫這些什么方法,大家也可以找找看其他的。

通過(guò)構(gòu)造器傳值

這是最簡(jiǎn)單的一種方式,例如我從form1中要傳一個(gè)字符串去form2
首先,在form2的構(gòu)造器中稍作修改:

復(fù)制代碼 代碼如下:

        public Form2(String s)
        {
            InitializeComponent();
            this.labelRecieve.Text = s;
    }

  添加了一個(gè)string參數(shù) s
然后,在form1的click事件中,將要傳遞的參數(shù)傳入,如下片斷:
復(fù)制代碼 代碼如下:

private void buttonShow_Click(object sender, EventArgs e)
        {
            …
            Form2 f2;
            if (textBoxSend.Text == "")
            {
                f2 = new Form2("I'm from form1");
            }
            else
            {
                f2 = new Form2(textBoxSend.Text);
              }
                 DialogResult r = f2.ShowDialog();//至于Show與ShowDialog就不用再說(shuō)了吧
               …
           }

在觸發(fā)click事件的時(shí)候,form2就接受到f1傳過(guò)去的textBoxSend.Text或者"I'm from form1",并且用labelRecieve去承接它。
這種方法,雖然簡(jiǎn)單方便,但是畢竟功能有限,當(dāng)需要傳遞較大量的多樣的數(shù)據(jù)時(shí),用構(gòu)造器就不能勝任了。

通過(guò)屬性傳遞

屬性可以方便的傳遞多個(gè)數(shù)據(jù)(不就是添加多個(gè)屬性么?),假設(shè)我要從form2傳遞某字符串到form3,首先我們?yōu)閒orm3添加一個(gè)屬性叫myString

復(fù)制代碼 代碼如下:

 public Form3()
        {
            InitializeComponent();
        }
        public string myString
        {
            get
            {
                return this.textBoxf3.Text;
            }
            set
            {
                if (value == null)
                    textBoxf3.Text = string.Empty;
                else
                    textBoxf3.Text = value;
            }
         }

通過(guò)該屬性去設(shè)置文本框的text.
然后,在form2的點(diǎn)擊事件中,只需令

復(fù)制代碼 代碼如下:

      f3.myString = "I'm from form2";

這樣也很方便,值得一提的是,這樣通過(guò)屬性傳遞的時(shí)候,即可以將數(shù)據(jù)從form2船到form3又可以從form3傳回來(lái)。如
復(fù)制代碼 代碼如下:

   if (r == DialogResult.OK)
            {
                f3.myString = "I'm from form3";
                this.labelRecieve.Text = f3.myString;
                  //form3關(guān)閉的時(shí)候?qū)yString保存到form2的label中。
             }

屬性傳遞是最常用的一種方式。

通過(guò)事件攜帶參數(shù)傳遞

坦白說(shuō),我目前還很少用到這,準(zhǔn)確的說(shuō)這個(gè)應(yīng)該叫事件結(jié)合屬性傳值。
現(xiàn)在我在form4里面坐了某些操作,假設(shè)form4是我們開(kāi)發(fā)的類型庫(kù)的一部分,我想將它發(fā)布給其他的同事使用的時(shí)候,我們可以使用這樣的事件去傳值。
首先,在form4中,添加事件參數(shù)類型和事件處理器委托的定義:

復(fù)制代碼 代碼如下:

 public class myEventArgs : EventArgs
        {
            string myString;
            public string MyString
            {
                get
                {
                    return myString;
                }
                set
                {
                    if (value != null)
                        myString = value;
                    else
                        myString = string.Empty;
                }
              }

            public myEventArgs(string s)
            {
               this.MyString = s;
            }
        }  

//事件處理方法的委托
        public delegate void myEventHandler(object sender, myEventArgs e);

然后,我們?cè)赾lick事件中去觸發(fā)這樣一個(gè)公共的事件myClick

復(fù)制代碼 代碼如下:

 public event myEventHandler myClick;
          private void buttonClick_Click(object sender, EventArgs e)
      {
            if (this.myClick != null)
                this.myClick(this,new myEventArgs(textBox4.Text));
            this.DialogResult = DialogResult.OK;
    }

我們將textBox4中的文本封裝到myEventArgs這樣一個(gè)事件參數(shù)對(duì)象里面,這樣它就會(huì)隨著事件被傳到form3中,同時(shí)在form3中我們來(lái)添加一個(gè)事件處理方法,

復(fù)制代碼 代碼如下:

        void f4_myClick(object sender, Form4.myEventArgs e)
        {
            myString = e.MyString;
            this.textBoxf3.Text = String.Format("From f4: {0}",e.MyString);
        }  

在點(diǎn)擊事件中我們通過(guò)委托去調(diào)用該方法

復(fù)制代碼 代碼如下:

   Form4 f4 = new Form4();
   f4.myClick += new Form4.myEventHandler(f4_myClick);

在f4對(duì)象的myClick事件被觸發(fā)以后,會(huì)調(diào)用這里的f4_myClick方法,我們就可以通過(guò)該方法從事件參數(shù)中取得數(shù)據(jù)了,這里是放到textBoxf3中。

就寫到這里吧,文中描述的都是最基本的轉(zhuǎn)遞,當(dāng)然傳的參數(shù)可以是各種各樣的,也可以利用泛型委托,也可以把一個(gè)FORM里面的Constrol"傳"到另外的Form里面,大家自己去發(fā)揮吧 :)

相關(guān)文章

  • C#中的Task.WaitAll和Task.WaitAny方法介紹

    C#中的Task.WaitAll和Task.WaitAny方法介紹

    這篇文章介紹了C#中的Task.WaitAll和Task.WaitAny方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 詳解C#中三個(gè)關(guān)鍵字params,Ref,out

    詳解C#中三個(gè)關(guān)鍵字params,Ref,out

    本文主要討論params關(guān)鍵字,ref關(guān)鍵字,out關(guān)鍵字。非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-05-05
  • Unity通用泛型單例設(shè)計(jì)模式(普通型和繼承自MonoBehaviour)

    Unity通用泛型單例設(shè)計(jì)模式(普通型和繼承自MonoBehaviour)

    這篇文章主要介紹了Unity通用泛型單例設(shè)計(jì)模式,分為普通型和繼承MonoBehaviour,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C# 使用BitBlt進(jìn)行窗口抓圖的示例

    C# 使用BitBlt進(jìn)行窗口抓圖的示例

    這篇文章主要介紹了C# 使用BitBlt進(jìn)行窗口抓圖的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#實(shí)現(xiàn)文本文件讀寫方法匯總

    C#實(shí)現(xiàn)文本文件讀寫方法匯總

    本文給大家匯總介紹了C#實(shí)現(xiàn)文本文件讀寫的方法,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-06-06
  • C#實(shí)現(xiàn)創(chuàng)建標(biāo)簽PDF文件的示例代碼

    C#實(shí)現(xiàn)創(chuàng)建標(biāo)簽PDF文件的示例代碼

    標(biāo)簽PDF文件包含描述文檔結(jié)構(gòu)和各種文檔元素順序的元數(shù)據(jù),是一種包含后端提供的可訪問(wèn)標(biāo)記,管理閱讀順序和文檔內(nèi)容表示的邏輯結(jié)構(gòu)的PDF文件。本文將用C#實(shí)現(xiàn)創(chuàng)建標(biāo)簽PDF文件,需要的可以參考一下
    2022-08-08
  • 使用C#實(shí)現(xiàn)自己封裝的Modbus工具類庫(kù)

    使用C#實(shí)現(xiàn)自己封裝的Modbus工具類庫(kù)

    Modbus通訊協(xié)議在工控行業(yè)的應(yīng)用是很多的,并且也是上位機(jī)開(kāi)發(fā)的基本技能之一,所以本文主要為大家介紹了如何使用C#封裝一個(gè)Modbus工具類庫(kù),需要的可以參考下
    2024-02-02
  • C#中WPF依賴屬性的正確學(xué)習(xí)方法

    C#中WPF依賴屬性的正確學(xué)習(xí)方法

    這篇文章主要介紹了C#中WPF依賴屬性的正確學(xué)習(xí)方法 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • C#圖像重新著色的方法

    C#圖像重新著色的方法

    這篇文章主要介紹了C#圖像重新著色的方法,涉及C#中SetRemapTable方法替換顏色的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • C#的十種語(yǔ)法糖介紹

    C#的十種語(yǔ)法糖介紹

    這篇文章介紹了C#的十種語(yǔ)法糖,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02

最新評(píng)論