首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
coofucoo (105)
Drate (69)
lphpc (30)
CSDN - 文档中心 - .NET 阅读:4753   评论: 3    参与评论
标题   在.net中轻松掌握Windows窗体间的数据交互(三)     选择自 zhzuo 的 Blog
关键字   c# winForm 数据
出处  

.net中轻松掌握Windows窗体间的数据交互(三)

zhzuo(秋枫)

       第一篇第二篇文章中我们使用带参数的构造函数、属性以及方法实现了数据的交互,接下来要讲的是使用静态类来完成窗体间的数据交互。这个也是我们经常要用到的一种数据交互方法。

     三.使用静态类

下面是定义的一个类:

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窗体,其实在两个不同的实例间交互数据,都可以采用三篇文章中的方案实现,除非是这个类特有的属性或着方法。现在都讲完了,虽然不是什么高深的东西,但是希望能对一些初学者有所帮助,要是能真正的能解决一些朋友的实际问题,也算是我没有浪费时间来写文章,同时也欢迎各位朋友进行技术交流,共同提高,我的邮件地址zhzuocn@163.com


相关文章
对该文的评论
hantao2000 ( 2004-04-07)
谢谢,我还是学到了不少东西
zhzuo ( 2004-04-07)
回复 fengyun6:不需要。
因为public static ArrayList ListData属性:
说明设置值value也是Arraylist类型;
set{this.listData = value;}
而这个
AppDatas.ListData.Add(this.textBoxAdd.Text.Trim());
不是在修改ArrayList的引用;所以不需要。
如果朋友还有疑惑可以调试一下。
fengyun6 ( 2004-04-07)
在这篇《在.net中轻松掌握Windows窗体间的数据交互(三)》中,作者的属性仅设了:
public static ArrayList ListData

         {

              get{return listData;}

         }
没有设:set{listData = value;}
那么请问:后来的:
AppDatas.ListData.Add(this.textBoxAdd.Text.Trim());
可以实现吗?

当然,这三篇文章对我的启发还是有的,谢谢作者