在form第11中学开辟2个form2窗口作为录入界面,在form第11中学打开八个form2窗口作为录入界面澳门永利娱乐总站

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

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

 
在编写C#windows应用程序的时候大家日常会赶上那种难点,怎么着在多个窗体间传递数据呢?以下是自己收拾的网上的各类办法,在遇见一个实际上难题:在form第11中学开拓三个form2窗口作为录入界面,将录入的值经转换后在form第11中学突显。
选用了信托的法门,能够完成。(与VC的回调的选择一般)

1.得以经过委托的点子来化解

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

能够这么做,假如四个窗体是在同一个命名空间下

概念3个代理,注意那个代理是大局的:(即一律命名空间下,与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类中阐明一(Wissu)(Nutrilon)个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();//////类Form第22中学的构造函数不改,照旧无参的

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

//也足以动用函数的法子,给当下实例添加3个专属窗口 
代码: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,一个静态构造函数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. 
施用了寄托的办法,能够完毕。:很好的兑现了多少处理与数量呈现的分手,即FOTiggoM2(主)彰显与FOLX570M1数据处理,(不须求将FO库罗德M2的浮出现处FO安德拉M第11中学)与VC的回调的使用有可持续性。并且有限支撑了FORAV4M第11中学要修改的性格的私有性。

 

2. 
方法② 、3都以传递主窗口的引用,比较不难易用。能够兑现FO景逸SUVM2(主)与FO福特ExplorerM1全数数量的传递(然而须要将要FOXC60M1传递和要修改的数目设为PUBLIC),而那般会存在安全题材。

 

信托方法能够很好地完毕多少的维护

 

总结C#中窗体间传递数据的两种情势(由外人的法门整理)

 

 
在编写C#windows应用程序的时候大家平时会遇上那种问题,怎样在八个窗体间传递数据呢?以下是自身整理的网上的各个格局,在遇见2个其实难点:在form第11中学开辟三个form2窗口作为录入界面,将录入的值经转换后在form1中显得。
采用了寄托的法门,能够兑现。(与VC的回调的应用一般)

1.得以透过委托的方法来缓解

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

可以那样做,若是五个窗体是在同3个命名空间下

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

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

 

//在窗体From第22中学有这么2个回调函数,用于在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类中表美素佳儿(Friso)个Form1实例:Form1
f1=new
Form1();然后就足以由此f1来调用Form第11中学的域和函数了。其实不是那样的,你发明的新的Form1实例不是原来的百般Form1对象了,这样操作的是新的Form1中的域和函数,和初次打开的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 调用后添加任何构造函数代码
//
}

在Form1中,笔者在 要用到Form2的地点注脚如下:

Form2 f2=new 
Form2(this);////那里的this指的正是Form1当前的实例,也便是把近来Form1的实例通过Form2的构造函数字传送递给Form2类(其实在网上看到过比较蠢的章程,正是在构造函数里面传递要传送的新闻如:字符串或是数字等,这样做很有局限性,不可能传递其余的,全部大家得以一向传送实例,来形成传递更多的消息。)

诸如此类在Form第22中学采纳myForm 就足以对原先的Form1窗口实行操作了。不过你要把要操作的Form第11中学的域和函数定义成public形式的(如此那般只怕不安全),此时的myForm正是确实的最开始打开的Form1了,你能够用这么些实例来开展五个窗体的通信了。
()

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

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

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

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

//也能够选择函数的方法,给当下实例添加贰个隶属窗口 
代码: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;

         }

     }

}

地点包罗了1个静态类成员,listData,一个静态构造函数static
AppDatas(),用来开头化listData的数额。还有2个静态属性ListData和1个静态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. 
使用了委托的办法,能够兑现。:很好的兑现了数量处理与数据展现的分离,即FOOdysseyM2(主)显示与FO奇骏M1数据处理,(不必要将FO酷威M2的展现位于FO瑞虎M第11中学)与VC的回调的运用有可持续性。并且保险了FO凯雷德M第11中学要修改的性质的私有性。

 

2. 
方法② 、3都以传递主窗口的引用,比较不难易用。可以达成FO汉兰达M2(主)与FO路虎极光M1全数多少的传递(然则要求将要FO宝马X5M1传递和要修改的多寡设为PUBLIC),而那般会设有安全题材。

 

信托方法能够很好地促成数据的护卫

 

总结C#中窗体间传递数据的二种艺术 (由人家的点子整理)

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

 
在编写C#windows应用程序的时候我们平时会遇见那种难点,怎么着在三个窗体间传递数据呢?以下是自己整理的网上的种种法子,在境遇2个其实难题:在form第11中学打开3个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中学有那样1个回调函数,用于在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类中说美赞臣(Meadjohnson)个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类(其实在网上来看过相比较蠢的法门,正是在构造函数里面传递要传递的音讯如:字符串或是数字等,那样做很有局限性,不可能传递其余的,全体我们能够直接传送实例,来成功传递越来越多的音讯。)

那样在Form第22中学使用myForm 就能够对原来的Form1窗口举行操作了。不过你要把要操作的Form第11中学的域和函数定义成public形式的(那般或者不安全),此时的myForm就是的确的最初步打开的Form1了,你能够用这一个实例来进行三个窗体的简报了。
()

3.其实C#中提供了窗体间展开报纸发表的现成的性质,呵呵,大家能体会明白的,微软也想开了,他们创制的语言其实真正可以说是人性化了。

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

Form2 f2=new Form2();//////类Form第22中学的构造函数不改,照旧无参的

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

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

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

Form1 f1=this.owner;

这般f1对应的正是本来的Form1的实例了,也就足以用这么些实行报纸发表了。然而还是要把区别类之间访问的域和函数定义成public,哎,安全的确是3个题材!!

 

  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. 
选拔了委托的艺术,能够完结。:很好的贯彻了数量处理与数据体现的诀别,即FO昂科威M2(主)展现与FOWranglerM1数据处理,(不供给将FORubiconM2的显得身处FO奥迪Q5M第11中学)与VC的回调的利用有可持续性。并且保险了FOENVISIONM第11中学要修改的质量的私有性。

 

2. 
方法二 、3皆以传递主窗口的引用,相比不难易用。能够兑现FO大切诺基M2(主)与FOENCOREM1全体数量的传递(然则需求将要FO大切诺基M1传递和要修改的多少设为PUBLIC),而那般会设有安全题材。

 

委托方法能够很好地促成多少的保障

 

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

 

 
在编写C#windows应用程序的时候我们平时会遇见那种难题,怎样在七个窗体间传递数据呢?以下是笔者收拾的网上的各个办法,在遇见贰个实际难点:在form第11中学开拓一个form2窗口作为录入界面,将录入的值经转换后在form第11中学展现。
选用了信托的点子,能够实现。(与VC的回调的选取一般)

1.得以经过委托的方法来化解

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

可以如此做,若是多个窗体是在同二个命名空间下

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

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

 

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

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对象了,那样操作的是新的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窗口进行操作了。不过你要把要操作的Form1中的域和函数定义成public形式的(如此或许不安全),此时的myForm正是实在的最伊始打开的Form1了,你能够用这几个实例来拓展七个窗体的简报了。
()

3.其实C#中提供了窗体间进行报纸发表的现成的属性,呵呵,大家能体会精晓的,微软也想到了,他们创立的语言其实真的能够说是人性化了。

在Form1类中评释Form2时用如下代码:

Form2 f2=new Form2();//////类Form第22中学的构造函数不改,照旧无参的

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

//也得以选择函数的不二法门,给当下实例添加1个隶属窗口 
代码:this.AddOwnedForm(f2);

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

Form1 f1=this.owner;

如此f1对应的便是原本的Form1的实例了,也就足以用这一个进行报导了。不过照旧要把不一样类之间访问的域和函数定义成public,哎,安全的确是1个题材!!

 

  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(“请采用删除项!”);

         }

     }

}    

    
计算,我觉着采纳静态类比较多的地点正是把应用程序的配备文件装载到1个静态类里面,让全数的窗体和别的实例都足以经过静态属性以及静态方法使用那一个数量,比如三层结构或多层构造都得以访问它,而不是在多个实例间传来传去。在那里大家谈谈的是Windows窗体,其实在多少个分裂的实例间互动数据,都得以动用三篇小说中的方案达成,除非是以此类特有的性质或着法子。今后都讲完了,即便不是怎么奥秘的事物,可是期望能对一部分初学者有所帮衬,同时也欢迎各位朋友实行技术调换,共同进步。

 

 

剖析上面三种艺术:

1. 
运用了寄托的章程,能够兑现。:很好的完结了数码处理与数测量身体现的分别,即FO本田UR-VM2(主)彰显与FOPAJEROM1数据处理,(不须求将FOOdysseyM2的来得位于FO奥德赛M1中)与VC的回调的选取有可持续性。并且保险了FO凯雷德M第11中学要修改的性质的私有性。

 

2. 
方法二 、3皆以传递主窗口的引用,比较简单易用。能够兑现FOTucsonM2(主)与FO劲客M1全数数量的传递(但是必要将要FORAV4M1传递和要修改的数量设为PUBLIC),而如此会存在安全题材。

 

寄托方法可以很好地得以实现数量的掩护

 

相关文章