总结C#中窗体间传递数据的三种办法 (由人家的不二法门整理)

转自:http://blog.csdn.net/daisy423xu/article/details/1579854

 
在编写C#windows应用程序的时候大家经常会遭受这种题材,如何在五个窗体间传递数据呢?以下是自家收拾的网上的各样措施,在遭逢一个事实上问题:在form1中开拓一个form2窗口作为录入界面,将录入的值经转换后在form1中展现。
接纳了信托的不二法门,可以兑现。(与VC的回调的行使一般)

1.得以经过信托的办法来缓解

问题:通过form1做一个录入界面,将中间通过文本框录入的数值复值给
form2中的listview各列,用3个textbox1.text比喻吧,分别对应listview的3个列。

可以这么做,假诺多个窗体是在同一个命名空间下

概念一个代理,注意这些代理是大局的:(即一律命名空间下,与Form1,Form2平级的)

public delegate void MyInvoke(string Item1,string Item2,string Item3);

 

//在窗体From2中有如此一个回调函数,用于在ListView里添加一个新项的:

private void UpdateListView(string Item1,string Item2,string Item3)

{

    ListView1.Items.Add(Item1);

    ListView1.Items[ListView1.Items.Count – 1].SubItems.Add(Item2);

    ListView1.Items[ListView1.Items.Count – 1].SubItems.Add(Item3);

}

 

//比如说点击Form2的一个按钮弹出Form1举办录入,在点击按钮的风波下:

//把信托传过去

Form1 frmEdit=new Form1(new MyInvoke(UpdateListView));

frmEdit.ShowDialog(this);

 

//在Form1里定义一个性质

private MyInvoke mi=null;

 

在构造函数中收取这多少个委托:

public Form1(MyInvoke myInvoke)

{

   this.mi=myInvoke;

}

 

//录入数据后,点击OK按钮,在点击事件下:

//回调

this.mi(this.TextBox1.Text,this.TextBox3.Text,this.TextBox3.Text);

this.Close();//关闭Form1

增补:如果本身一旦想再把form2的值给form1,

Form1 frmEdit=new Form1(new MyInvoke(UpdateListView),string para1,string
para2…);

frmEdit.ShowDialog(this);

接下来将Form1的构造函数改成可以采取多少个参数的就行了。

 

2.假诺主框架为Form1,打开的探寻对话框是Form2.直接在Form2类中声明一个Form1实例:Form1
f1=new
Form1();然后就可以透过f1来调用Form1中的域和函数了。其实不是这样的,你发明的新的Form1实例不是原来的分外Form1对象了,这样操作的是新的Form1中的域和函数,和第一打开的Form1是未曾提到的。

我们要做的是把近年来的Form1实例传递给Form2,即使是这样的话,问题就很好解决了。

方法1:首先,我们在Form2中定义:

private Form1 mF_Form

我们转移Form2的构造函数为有参数的

public Form2 ( Form1 myForm )
{
//
// Windows 窗体设计器帮助所必要的
//
InitializeComponent ( ) ;
this.mF_Form  = myForm ;  
/////这样在Form1中注解Form2的时候就把Form1的实例传递过来了
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

在Form1中,我在 要用到Form2的地点注明如下:

Form2 f2=new 
Form2(this);////这里的this指的就是Form1当前的实例,也就是把当下Form1的实例通过Form2的构造函数传递给Form2类(其实在网上看到过相比蠢的点子,就是在构造函数里面传递要传递的音信如:字符串或是数字等,这样做很有局限性,无法传递其他的,所有我们可以一贯传送实例,来完成传递更多的音讯。)

这么在Form2中采用myForm 就可以对本来的Form1窗口举办操作了。不过你要把要操作的Form1中的域和函数定义成public形式的(这样也许不安全),此时的myForm就是当真的最起头打开的Form1了,你可以用这些实例来开展五个窗体的简报了。
()

3.其实C#中提供了窗体间举行报道的现成的特性,呵呵,我们能体悟的,微软也想到了,他们成立的语言其实真正能够说是人性化了。

在Form1类中声明Form2时用如下代码:

Form2 f2=new Form2();//////类Form2中的构造函数不改,仍旧无参的

f2.owner=this;////这里的this指的是类Form1当前的实例。

//也足以运用函数的措施,给当下实例添加一个直属窗口 
代码:this.AddOwnedForm(f2);

在Form2类的概念中写如下代码:

Form1 f1=this.owner;

这么f1对应的就是本来的Form1的实例了,也就足以用那一个举办报道了。但是如故要把不同类之间访问的域和函数定义成public,哎,安全的确是一个题材!!

 

  4.用到静态类
    这多少个也是大家平时要用到的一种多少交互形式。

上面是概念的一个类:

using System;

using System.Collections;

namespace ZZ

{

     public class AppDatas

     {

         private static ArrayList listData;

         static AppDatas()

         {

              listData = new ArrayList();

              listData.Add(“DotNet”);

              listData.Add(“C#”);

              listData.Add(“Asp.net”);

              listData.Add(“WebService”);

              listData.Add(“XML”);

         }

         public static ArrayList ListData

         {

              get{return listData;}

         }

         public static ArrayList GetListData()

         {

              return listData;

         }

     }

}

下面包含了一个静态类成员,listData,一个静态构造函数static
AppDatas(),用来伊始化listData的数量。还有一个静态属性ListData和一个静态GetListData()方法,他们实现了同一的效能就是回到listData。

鉴于前边两篇著作已经讲了成百上千,这里不细说了,下边是完整的代码:

Form1.cs文件

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace ZZ

{

     public class Form1 : System.Windows.Forms.Form

     {

         private System.Windows.Forms.Button buttonEdit;

         private System.Windows.Forms.ListBox listBoxFrm1;

         private System.ComponentModel.Container components = null;

         public Form1()

         {

              InitializeComponent();

              this.listBoxFrm1.DataSource = AppDatas.ListData;

             

         }

         protected override void Dispose( bool disposing )

         {

              if( disposing )

                   if(components != null)

                       components.Dispose();

              base.Dispose( disposing );

         }

         [STAThread]

         static void Main()

         {

              Application.Run(new Form1());

         }

         private void InitializeComponent()

         {

              this.buttonEdit = new System.Windows.Forms.Button();

              this.listBoxFrm1 = new System.Windows.Forms.ListBox();

              this.SuspendLayout();

              this.buttonEdit.Location = new System.Drawing.Point(128,
108);

              this.buttonEdit.Name = “buttonEdit”;

              this.buttonEdit.TabIndex = 1;

              this.buttonEdit.Text = “修改”;

              this.buttonEdit.Click += new
System.EventHandler(this.buttonEdit_Click);

              this.listBoxFrm1.ItemHeight = 12;

              this.listBoxFrm1.Location = new System.Drawing.Point(12,
8);

              this.listBoxFrm1.Name = “listBoxFrm1”;

              this.listBoxFrm1.Size = new System.Drawing.Size(108, 124);

              this.listBoxFrm1.TabIndex = 2;

              this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

              this.ClientSize = new System.Drawing.Size(208, 141);

              this.Controls.Add(this.listBoxFrm1);

              this.Controls.Add(this.buttonEdit);

              this.Name = “Form1”;

              this.Text = “Form1”;

              this.ResumeLayout(false);

         }

         private void buttonEdit_Click(object sender, System.EventArgs
e)

         {

              Form2 formChild = new Form2();

              formChild.ShowDialog();

              this.listBoxFrm1.DataSource = null;

              this.listBoxFrm1.DataSource = AppDatas.ListData;

         }

     }

}

 

Form2.cs文件

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace ZZ

{

     public class Form2 : System.Windows.Forms.Form

     {

         private System.Windows.Forms.Button buttonOK;

         private System.ComponentModel.Container components = null;

         private System.Windows.Forms.ListBox listBoxFrm2;

         private System.Windows.Forms.Button buttonAdd;

         private System.Windows.Forms.Button buttonDel;

         private System.Windows.Forms.TextBox textBoxAdd;

         public Form2()

         {

              InitializeComponent();

              foreach(object o in AppDatas.ListData)

                   this.listBoxFrm2.Items.Add(o);

         }

         protected override void Dispose( bool disposing )

         {

              if( disposing )

                   if(components != null)

                       components.Dispose();

              base.Dispose( disposing );

         }

         private void InitializeComponent()

         {

              this.buttonOK = new System.Windows.Forms.Button();

              this.listBoxFrm2 = new System.Windows.Forms.ListBox();

              this.buttonAdd = new System.Windows.Forms.Button();

              this.buttonDel = new System.Windows.Forms.Button();

              this.textBoxAdd = new System.Windows.Forms.TextBox();

              this.SuspendLayout();

              this.buttonOK.Location = new System.Drawing.Point(188,
108);

              this.buttonOK.Name = “buttonOK”;

              this.buttonOK.TabIndex = 0;

              this.buttonOK.Text = “确定”;

              this.buttonOK.Click += new
System.EventHandler(this.buttonOK_Click);

              this.listBoxFrm2.ItemHeight = 12;

              this.listBoxFrm2.Location = new System.Drawing.Point(8,
8);

              this.listBoxFrm2.Name = “listBoxFrm2”;

              this.listBoxFrm2.Size = new System.Drawing.Size(168, 124);

              this.listBoxFrm2.TabIndex = 2;

              this.buttonAdd.Location = new System.Drawing.Point(188,
44);

              this.buttonAdd.Name = “buttonAdd”;

              this.buttonAdd.TabIndex = 3;

              this.buttonAdd.Text = “增加”;

              this.buttonAdd.Click += new
System.EventHandler(this.buttonAdd_Click);

              this.buttonDel.Location = new System.Drawing.Point(188,
76);

              this.buttonDel.Name = “buttonDel”;

              this.buttonDel.TabIndex = 4;

              this.buttonDel.Text = “删除”;

              this.buttonDel.Click += new
System.EventHandler(this.buttonDel_Click);

              this.textBoxAdd.Location = new System.Drawing.Point(188,
12);

              this.textBoxAdd.Name = “textBoxAdd”;

              this.textBoxAdd.Size = new System.Drawing.Size(76, 21);

              this.textBoxAdd.TabIndex = 5;

              this.textBoxAdd.Text = “”;

              this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

              this.ClientSize = new System.Drawing.Size(272, 141);

              this.Controls.Add(this.textBoxAdd);

              this.Controls.Add(this.buttonDel);

              this.Controls.Add(this.buttonAdd);

              this.Controls.Add(this.listBoxFrm2);

              this.Controls.Add(this.buttonOK);

              this.Name = “Form2”;

              this.Text = “Form2”;

              this.ResumeLayout(false);

         }

         private void buttonOK_Click(object sender, System.EventArgs
e)
         {
              this.Close();
         }

         private void buttonAdd_Click(object sender, System.EventArgs
e)

         {

              if(this.textBoxAdd.Text.Trim().Length>0)

              {

                   AppDatas.ListData.Add(this.textBoxAdd.Text.Trim());

                  
this.listBoxFrm2.Items.Add(this.textBoxAdd.Text.Trim());

              }

              else

                   MessageBox.Show(“请输入添加的始末!”);

             

         }

         private void buttonDel_Click(object sender, System.EventArgs
e)

         {

              int index = this.listBoxFrm2.SelectedIndex;

              if(index!=-1)

              {

                    AppDatas.ListData.RemoveAt(index);

                   this.listBoxFrm2.Items.RemoveAt(index);

              }

              else

                   MessageBox.Show(“请接纳删除项!”);

         }

     }

}    

    
统计,我以为拔取静态类相比较多的地点就是把应用程序的配备文件装载到一个静态类里面,让具备的窗体和此外实例都可以通过静态属性以及静态方法使用这个多少,比如三层社团或多层社团都足以访问它,而不是在两个实例间传来传去。在此间我们谈论的是Windows窗体,其实在五个例外的实例间彼此数据,都可以利用三篇文章中的方案实现,除非是其一类特有的特性或着艺术。现在都讲完了,即便不是怎么着奥秘的事物,可是期望能对一些初学者有所帮助,同时也欢迎各位朋友举办技术交换,共同提升。

 

 

浅析下面二种艺术:

1. 
应用了寄托的法子,可以兑现。:很好的实现了多少处理与数码呈现的分别,即FORM2(主)显示与FORM1数据处理,(不需要将FORM2的突显身处FORM1中)与VC的回调的使用有可持续性。并且保证了FORM1中要修改的属性的私有性。

 

2. 
方法2、3都是传递主窗口的引用,相比较简单易用。可以兑现FORM2(主)与FORM1所有数量的传递(然而需要将要FORM1传递和要修改的多寡设为PUBLIC),而如此会存在安全题材。

 

信托方法可以很好地贯彻数据的维护

 

总结C#中窗体间传递数据的三种情势(由别人的法子整理)

 

 
在编写C#windows应用程序的时候我们经常会赶上这种问题,咋样在七个窗体间传递数据呢?以下是自己整理的网上的各样艺术,在遇见一个实际问题:在form1中开辟一个form2窗口作为录入界面,将录入的值经转换后在form1中呈现。
接纳了寄托的法子,可以兑现。(与VC的回调的运用一般)

1.可以通过委托的章程来化解

题材:通过form1做一个录入界面,将其中通过文本框录入的数值复值给
form2中的listview各列,用3个textbox1.text比方吧,分别对应listview的3个列。

可以这样做,假设六个窗体是在同一个命名空间下

概念一个代理,注意这一个代理是大局的:(即一律命名空间下,与Form1,Form2平级的)

public delegate void MyInvoke(string Item1,string Item2,string Item3);

 

//在窗体From2中有这么一个回调函数,用于在ListView里添加一个新项的:

private void UpdateListView(string Item1,string Item2,string Item3)

{

    ListView1.Items.Add(Item1);

    ListView1.Items[ListView1.Items.Count – 1].SubItems.Add(Item2);

    ListView1.Items[ListView1.Items.Count – 1].SubItems.Add(Item3);

}

 

//比如说点击Form2的一个按钮弹出Form1举办录入,在点击按钮的事件下:

//把信托传过去

Form1 frmEdit=new Form1(new MyInvoke(UpdateListView));

frmEdit.ShowDialog(this);

 

//在Form1里定义一个性质

private MyInvoke mi=null;

 

在构造函数中收取这多少个委托:

public Form1(MyInvoke myInvoke)

{

   this.mi=myInvoke;

}

 

//录入数据后,点击OK按钮,在点击事件下:

//回调

this.mi(this.TextBox1.Text,this.TextBox3.Text,this.TextBox3.Text);

this.Close();//关闭Form1

补给:如若自身一旦想再把form2的值给form1,

Form1 frmEdit=new Form1(new MyInvoke(UpdateListView),string para1,string
para2…);

frmEdit.ShowDialog(this);

接下来将Form1的构造函数改成可以接过多少个参数的就行了。

 

2.假诺主框架为Form1,打开的物色对话框是Form2.一贯在Form2类中讲明一个Form1实例:Form1
f1=new
Form1();然后就可以通过f1来调用Form1中的域和函数了。其实不是如此的,你发明的新的Form1实例不是原先的相当Form1对象了,这样操作的是新的Form1中的域和函数,和初次打开的Form1是尚未提到的。

我们要做的是把当前的Form1实例传递给Form2,即使是这样的话,问题就很好解决了。

方法1:首先,我们在Form2中定义:

private Form1 mF_Form

大家改变Form2的构造函数为有参数的

public Form2 ( Form1 myForm )
{
//
// Windows 窗体设计器协理所不可或缺的
//
InitializeComponent ( ) ;
this.mF_Form  = myForm ;  
/////这样在Form1中讲明Form2的时候就把Form1的实例传递过来了
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

在Form1中,我在 要用到Form2的地点阐明如下:

Form2 f2=new 
Form2(this);////这里的this指的就是Form1当前的实例,也就是把当下Form1的实例通过Form2的构造函数传递给Form2类(其实在网上看到过相比较蠢的不二法门,就是在构造函数里面传递要传送的信息如:字符串或是数字等,那样做很有局限性,不可以传递其他的,所有我们得以直接传送实例,来形成传递更多的音信。)

这样在Form2中动用myForm 就足以对原先的Form1窗口举行操作了。不过你要把要操作的Form1中的域和函数定义成public形式的(诸如此类或许不安全),此时的myForm就是确实的最最先打开的Form1了,你可以用这么些实例来举行七个窗体的报导了。
()

3.其实C#中提供了窗体间举办报道的现成的性能,呵呵,我们能体悟的,微软也想开了,他们创设的言语其实确实能够说是人性化了。

在Form1类中注解Form2时用如下代码:

Form2 f2=new Form2();//////类Form2中的构造函数不改,仍然无参的

f2.owner=this;////那里的this指的是类Form1当前的实例。

//也可以动用函数的不二法门,给当下实例添加一个专属窗口 
代码:this.AddOwnedForm(f2);

在Form2类的概念中写如下代码:

Form1 f1=this.owner;

这样f1对应的就是原来的Form1的实例了,也就足以用这多少个举行报道了。不过仍旧要把不同类之间访问的域和函数定义成public,哎,安全的确是一个题目!!

 

  4.使用静态类
    这些也是我们平常要用到的一种多少交互模式。

下边是概念的一个类:

using System;

using System.Collections;

namespace ZZ

{

     public class AppDatas

     {

         private static ArrayList listData;

         static AppDatas()

         {

              listData = new ArrayList();

              listData.Add(“DotNet”);

              listData.Add(“C#”);

              listData.Add(“Asp.net”);

              listData.Add(“WebService”);

              listData.Add(“XML”);

         }

         public static ArrayList ListData

         {

              get{return listData;}

         }

         public static ArrayList GetListData()

         {

              return listData;

         }

     }

}

地点包含了一个静态类成员,listData,一个静态构造函数static
AppDatas(),用来开首化listData的多少。还有一个静态属性ListData和一个静态GetListData()方法,他们实现了千篇一律的职能就是回来listData。

是因为前边两篇作品已经讲了诸多,这里不细说了,下边是完好的代码:

Form1.cs文件

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace ZZ

{

     public class Form1 : System.Windows.Forms.Form

     {

         private System.Windows.Forms.Button buttonEdit;

         private System.Windows.Forms.ListBox listBoxFrm1;

         private System.ComponentModel.Container components = null;

         public Form1()

         {

              InitializeComponent();

              this.listBoxFrm1.DataSource = AppDatas.ListData;

             

         }

         protected override void Dispose( bool disposing )

         {

              if( disposing )

                   if(components != null)

                       components.Dispose();

              base.Dispose( disposing );

         }

         [STAThread]

         static void Main()

         {

              Application.Run(new Form1());

         }

         private void InitializeComponent()

         {

              this.buttonEdit = new System.Windows.Forms.Button();

              this.listBoxFrm1 = new System.Windows.Forms.ListBox();

              this.SuspendLayout();

              this.buttonEdit.Location = new System.Drawing.Point(128,
108);

              this.buttonEdit.Name = “buttonEdit”;

              this.buttonEdit.TabIndex = 1;

              this.buttonEdit.Text = “修改”;

              this.buttonEdit.Click += new
System.EventHandler(this.buttonEdit_Click);

              this.listBoxFrm1.ItemHeight = 12;

              this.listBoxFrm1.Location = new System.Drawing.Point(12,
8);

              this.listBoxFrm1.Name = “listBoxFrm1”;

              this.listBoxFrm1.Size = new System.Drawing.Size(108, 124);

              this.listBoxFrm1.TabIndex = 2;

              this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

              this.ClientSize = new System.Drawing.Size(208, 141);

              this.Controls.Add(this.listBoxFrm1);

              this.Controls.Add(this.buttonEdit);

              this.Name = “Form1”;

              this.Text = “Form1”;

              this.ResumeLayout(false);

         }

         private void buttonEdit_Click(object sender, System.EventArgs
e)

         {

              Form2 formChild = new Form2();

              formChild.ShowDialog();

              this.listBoxFrm1.DataSource = null;

              this.listBoxFrm1.DataSource = AppDatas.ListData;

         }

     }

}

 

Form2.cs文件

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace ZZ

{

     public class Form2 : System.Windows.Forms.Form

     {

         private System.Windows.Forms.Button buttonOK;

         private System.ComponentModel.Container components = null;

         private System.Windows.Forms.ListBox listBoxFrm2;

         private System.Windows.Forms.Button buttonAdd;

         private System.Windows.Forms.Button buttonDel;

         private System.Windows.Forms.TextBox textBoxAdd;

         public Form2()

         {

              InitializeComponent();

              foreach(object o in AppDatas.ListData)

                   this.listBoxFrm2.Items.Add(o);

         }

         protected override void Dispose( bool disposing )

         {

              if( disposing )

                   if(components != null)

                       components.Dispose();

              base.Dispose( disposing );

         }

         private void InitializeComponent()

         {

              this.buttonOK = new System.Windows.Forms.Button();

              this.listBoxFrm2 = new System.Windows.Forms.ListBox();

              this.buttonAdd = new System.Windows.Forms.Button();

              this.buttonDel = new System.Windows.Forms.Button();

              this.textBoxAdd = new System.Windows.Forms.TextBox();

              this.SuspendLayout();

              this.buttonOK.Location = new System.Drawing.Point(188,
108);

              this.buttonOK.Name = “buttonOK”;

              this.buttonOK.TabIndex = 0;

              this.buttonOK.Text = “确定”;

              this.buttonOK.Click += new
System.EventHandler(this.buttonOK_Click);

              this.listBoxFrm2.ItemHeight = 12;

              this.listBoxFrm2.Location = new System.Drawing.Point(8,
8);

              this.listBoxFrm2.Name = “listBoxFrm2”;

              this.listBoxFrm2.Size = new System.Drawing.Size(168, 124);

              this.listBoxFrm2.TabIndex = 2;

              this.buttonAdd.Location = new System.Drawing.Point(188,
44);

              this.buttonAdd.Name = “buttonAdd”;

              this.buttonAdd.TabIndex = 3;

              this.buttonAdd.Text = “增加”;

              this.buttonAdd.Click += new
System.EventHandler(this.buttonAdd_Click);

              this.buttonDel.Location = new System.Drawing.Point(188,
76);

              this.buttonDel.Name = “buttonDel”;

              this.buttonDel.TabIndex = 4;

              this.buttonDel.Text = “删除”;

              this.buttonDel.Click += new
System.EventHandler(this.buttonDel_Click);

              this.textBoxAdd.Location = new System.Drawing.Point(188,
12);

              this.textBoxAdd.Name = “textBoxAdd”;

              this.textBoxAdd.Size = new System.Drawing.Size(76, 21);

              this.textBoxAdd.TabIndex = 5;

              this.textBoxAdd.Text = “”;

              this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

              this.ClientSize = new System.Drawing.Size(272, 141);

              this.Controls.Add(this.textBoxAdd);

              this.Controls.Add(this.buttonDel);

              this.Controls.Add(this.buttonAdd);

              this.Controls.Add(this.listBoxFrm2);

              this.Controls.Add(this.buttonOK);

              this.Name = “Form2”;

              this.Text = “Form2”;

              this.ResumeLayout(false);

         }

         private void buttonOK_Click(object sender, System.EventArgs
e)
         {
              this.Close();
         }

         private void buttonAdd_Click(object sender, System.EventArgs
e)

         {

              if(this.textBoxAdd.Text.Trim().Length>0)

              {

                   AppDatas.ListData.Add(this.textBoxAdd.Text.Trim());

                  
this.listBoxFrm2.Items.Add(this.textBoxAdd.Text.Trim());

              }

              else

                   MessageBox.Show(“请输入添加的始末!”);

             

         }

         private void buttonDel_Click(object sender, System.EventArgs
e)

         {

              int index = this.listBoxFrm2.SelectedIndex;

              if(index!=-1)

              {

                    AppDatas.ListData.RemoveAt(index);

                   this.listBoxFrm2.Items.RemoveAt(index);

              }

              else

                   MessageBox.Show(“请选取删除项!”);

         }

     }

}    

    
总计,我认为利用静态类相比较多的地点就是把应用程序的配置文件装载到一个静态类里面,让所有的窗体和其余实例都足以因而静态属性以及静态方法使用这多少个数据,比如三层结构或多层结构都得以访问它,而不是在多少个实例间传来传去。在这里我们谈谈的是Windows窗体,其实在六个不同的实例间互为数据,都得以运用三篇作品中的方案实现,除非是以此类特有的属性或着艺术。现在都讲完了,尽管不是怎么着奥秘的东西,可是期望能对部分初学者有所匡助,同时也欢迎各位朋友举行技术交换,共同提升。

 

 

解析上边三种情势:

1. 
使用了委托的形式,可以兑现。:很好的实现了数据处理与数据显示的诀别,即FORM2(主)展现与FORM1数据处理,(不需要将FORM2的来得身处FORM1中)与VC的回调的采纳有可持续性。并且保证了FORM1中要修改的属性的私有性。

 

2. 
方法2、3都是传递主窗口的引用,相比较简单易用。可以兑现FORM2(主)与FORM1所有数据的传递(不过需要将要FORM1传递和要修改的数额设为PUBLIC),而这样会存在安全题材。

 

委托方法可以很好地促成多少的掩护

 

相关文章

网站地图xml地图