C#-MDI-多窗口通讯方式总计

总结C#中窗体间传递数据的两种办法 (由外人的艺术整理)

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

 
在编写C#windows应用程序的时候大家常常会赶上那种难点,怎样在多个窗体间传递数据呢?以下是本身整理的网上的各样措施,在境遇多少个实在难题:在form第11中学开拓3个form2窗口作为录入界面,将录入的值经转换后在form第11中学体现。
接纳了委托的不二法门,能够兑现。(与VC的回调的采纳一般)

1.方可通过委托的主意来消除

标题:通过form1做贰个录入界面,将中间通过文本框录入的数值复值给
form第22中学的listview各列,用一个textbox1.text比喻吧,分别对应listview的三个列。

能够如此做,假若八个窗体是在同五个命名空间下

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

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

 

//在窗体From第22中学有如此三个回调函数,用于在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来调用Form第11中学的域和函数了。其实不是这么的,你发明的新的Form1实例不是原本的分外Form1对象了,这样操作的是新的Form1中的域和函数,和第1打开的Form1是没有关联的。

大家要做的是把当下的Form1实例传递给Form2,要是是那样的话,难题就很好化解了。

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

private Form1 mF_Form

作者们改变Form2的构造函数为有参数的

public Form2 ( Form1 myForm )
{
//
// Windows 窗体设计器支持所必要的
//
InitializeComponent ( ) ;
this.mF_Form  = myForm ;  
/////那样在Form第11中学申明Form2的时候就把Form1的实例传递过来了
//
// TODO: 在 InitializeComponent 调用后添加别的构造函数代码
//
}

在Form第11中学,作者在 要用到Form2的地方申明如下:

Form2 f2=new 
Form2(this);////那里的this指的正是Form1当前的实例,相当于把当前Form1的实例通过Form2的构造函数字传送递给Form2类(其实在网上看看过比较蠢的不二法门,正是在构造函数里面传递要传递的新闻如:字符串或是数字等,这样做很有局限性,不能够传递别的的,全部我们得以一贯传送实例,来形成传递越多的消息。)

这么在Form2中使用myForm 就能够对原来的Form1窗口举行操作了。但是你要把要操作的Form第11中学的域和函数定义成public形式的(这么或者不安全),此时的myForm就是真的的最起首打开的Form1了,你能够用这一个实例来进行七个窗体的广播发表了。
()

3.其实C#中提供了窗体间开始展览广播发表的现成的习性,呵呵,我们能想到的,微软也想开了,他们创立的言语其实确实能够说是人性化了。

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

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

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

//也得以使用函数的艺术,给当下实例添加1个直属窗口 
代码: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的数额。还有3个静态属性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. 
施用了信托的章程,能够达成。:很好的完结了数额处理与数量显示的分开,即FO途观M2(主)展现与FO大切诺基M1数据处理,(不要求将FO普拉多M2的映出现处FO福睿斯M第11中学)与VC的回调的选取有可持续性。并且有限援助了FO奥迪Q5M第11中学要修改的习性的私有性。

 

2. 
方法二 、3都以传递主窗口的引用,相比较简单易用。能够兑现FOXC90M2(主)与FO帕JeroM1所有数据的传递(然而需求将要FO大切诺基M1传递和要修改的多少设为PUBLIC),而如此会存在安全难点。

 

寄托方法能够很好地促成数量的保卫安全

 

总结C#中窗体间传递数据的二种艺术(由别人的格局整理)

 

 
在编写C#windows应用程序的时候大家日常会遇上那种题材,怎么着在八个窗体间传递数据呢?以下是自作者收拾的网上的各样格局,在境遇二个实在难题:在form第11中学开拓二个form2窗口作为录入界面,将录入的值经转换后在form第11中学显示。
选取了委托的方法,可以完结。(与VC的回调的利用一般)

1.方可因此信托的章程来消除

标题:通过form1做1个录入界面,将个中通过文本框录入的数值复值给
form第22中学的listview各列,用三个textbox1.text比方吧,分别对应listview的二个列。

能够这么做,即便多少个窗体是在同贰个命名空间下

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

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

 

//在窗体From第22中学有这么八个回调函数,用于在ListView里添加3个新项的:

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里定义2天质量

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来调用Form第11中学的域和函数了。其实不是这么的,你发明的新的Form1实例不是原本的老大Form1对象了,那样操作的是新的Form第11中学的域和函数,和初次打开的Form1是从未有过关联的。

我们要做的是把当前的Form1实例传递给Form2,假诺是那样的话,难点就很好消除了。

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

private Form1 mF_Form

我们改变Form2的构造函数为有参数的

public Form2 ( Form1 myForm )
{
//
// Windows 窗体设计器协助所必备的
//
InitializeComponent ( ) ;
this.mF_Form  = myForm ;  
/////那样在Form第11中学证明Form2的时候就把Form1的实例传递过来了
//
// TODO: 在 InitializeComponent 调用后添加其它构造函数代码
//
}

在Form第11中学,小编在 要用到Form2的地点声明如下:

Form2 f2=new 
Form2(this);////那里的this指的正是Form1当前的实例,也正是把当前Form1的实例通过Form2的构造函数字传送递给Form2类(其实在网上来看过相比蠢的点子,便是在构造函数里面传递要传递的音信如:字符串或是数字等,那样做很有局限性,无法传递其余的,全部大家得以平昔传送实例,来成功传递更加多的音讯。)

这么在Form2中应用myForm 就能够对原本的Form1窗口进行操作了。但是你要把要操作的Form第11中学的域和函数定义成public形式的(这么或者不安全),此时的myForm就是真的的最开始打开的Form1了,你能够用这一个实例来开展多少个窗体的通信了。
()

3.其实C#中提供了窗体间展开电视发表的现成的属性,呵呵,我们能体会精通的,微软也想到了,他们创立的语言其实真的能够说是人性化了。

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

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

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

//也足以使用函数的法子,给当下实例添加2个直属窗口 
代码:this.AddOwnedForm(f2);

在Form2类的定义中写如下代码:

Form1 f1=this.owner;

诸如此类f1对应的便是本来的Form1的实例了,也就足以用那个实行报导了。但是依旧要把分歧类之间访问的域和函数定义成public,哎,安全的确是2个难题!!

 

  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,1个静态构造函数static
AppDatas(),用来初步化listData的数码。还有2个静态属性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(“请输入添加的始末!”);

             

C++,         }

         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. 
施用了信托的点子,能够兑现。:很好的兑现了数据处理与数量显示的离别,即FORubiconM2(主)突显与FO凯雷德M1数据处理,(不要求将FO中华VM2的显示位于FO大切诺基M1中)与VC的回调的运用有可持续性。并且保险了FOHighlanderM第11中学要修改的属性的私有性。

 

2. 
方法贰 、3都以传递主窗口的引用,相比不难易用。能够完成FOENCOREM2(主)与FO冠道M1全体多少的传递(可是供给将要FOHighlanderM1传递和要修改的数目设为PUBLIC),而如此会存在安全难题。

 

寄托方法能够很好地促成数量的有限支撑