程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# Winform窗口之間傳值的多種辦法淺析

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

編輯:C#入門知識

C# Winform窗口之間傳值的多種辦法淺析。本站提示廣大學習愛好者:(C# Winform窗口之間傳值的多種辦法淺析)文章只能為提供參考,不一定能成為您想要的結果。以下是C# Winform窗口之間傳值的多種辦法淺析正文


摘要

普通的工程都是多個form構成的,各個窗體之間常常要靈巧的傳遞數據。上面分享一點本身的經歷:

窗體傳值的辦法有許多,上面僅引見我用過的一些,不曉得官方叫這些甚麼辦法,年夜家也能夠找找看其他的。

經由過程結構器傳值

這是最簡略的一種方法,例如我從form1中要傳一個字符串去form2
起首,在form2的結構器中稍作修正:

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

  添加了一個string參數 s
然後,在form1的click事宜中,將要傳遞的參數傳入,以下片段:

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就不消再說了吧
               …
           }

在觸發click事宜的時刻,form2就接收到f1傳曩昔的textBoxSend.Text或許"I'm from form1",而且用labelRecieve去承接它。
這類辦法,固然簡略便利,然則究竟功效無限,當須要傳遞較年夜量的多樣的數據時,用結構器就不克不及勝任了。

經由過程屬性傳遞

屬性可以便利的傳遞多個數據(不就是添加多個屬性麼?),假定我要從form2傳遞某字符串到form3,起首我們為form3添加一個屬性叫myString

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

經由過程該屬性去設置文本框的text.
然後,在form2的點擊事宜中,只需令

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

如許也很便利,值得一提的是,如許經由過程屬性傳遞的時刻,便可以將數據從form2船到form3又可以從form3傳回來。如

   if (r == DialogResult.OK)
            {
                f3.myString = "I'm from form3";
                this.labelRecieve.Text = f3.myString;
                  //form3封閉的時刻將myString保留到form2的label中。
             }

屬性傳遞是最經常使用的一種方法。

經由過程事宜攜帶參數傳遞

坦率說,我今朝還很罕用到這,精確的說這個應當叫事宜聯合屬性傳值。
如今我在form4外面坐了某些操作,假定form4是我們開辟的類型庫的一部門,我想將它宣布給其他的同事應用的時刻,我們可使用如許的事宜去傳值。
起首,在form4中,添加事宜參數類型和事宜處置器拜托的界說:

 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);

然後,我們在click事宜中去觸發如許一個公共的事宜myClick

 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如許一個事宜參數對象外面,如許它就會跟著事宜被傳到form3中,同時在form3中我們來添加一個事宜處置辦法,

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

在點擊事宜中我們經由過程拜托去挪用該辦法

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

在f4對象的myClick事宜被觸發今後,會挪用這裡的f4_myClick辦法,我們便可以經由過程該辦法從事宜參數中獲得數據了,這裡是放到textBoxf3中。

就寫到這裡吧,文中描寫的都是最根本的轉遞,固然傳的參數可所以各類各樣的,也能夠應用泛型拜托,也能夠把一個FORM外面的Constrol"傳"到別的的Form外面,年夜家本身去施展吧 :)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved