浏览 23983 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-06
C#中没有了像VB.Net中的全局变量,那么我们如何实现在不同的页面间传递参数呢? 下面举例说明如何实现这一功能. 1.新建一个项目. 2.在该工程中添加一个窗体Form1. 3.在该窗体中定义静态型字符串变量myTestStr1: public static string myTestStr1=""; 4.在该窗体的构造函数中对该变量进行赋值,并为该窗体类添加属性GetStrValue. public Form_Form1() { InitializeComponent(); myTestStr1="Hello!"; } public string GetStrValue { get { return myTestStr1; } set { myTestStr1=value; } } 5.在该工程中另添加一个窗体Form2. 6.在Form1窗体上添加一个button按钮(name:but_Test); 7.在Form1窗体的but_Test_Click 事件中添加以下代码: private void but_Test_Click(object sender, System.EventArgs e) { Form2 frm1=new Form2(); frm1.ShowDialog(this) ; frm1.Close(); } 8.在Form2窗体上添加一个button按钮(name:but_Yes); 9.在Form1窗体的but_Yes_Click 事件中添加以下代码: private void but_Yes_Click(object sender, System.EventArgs e) { MessageBox.Show (Form_Form1.myTestStr1 ); //直接访问. 显示.结果:" Hello!" Form_Form1 frm2=new Form_Form1(); frm2.GetStrValue ="How do you do?"; //生成一个新的实例对该静态变量进行操作(修改该静态变量的值). MessageBox.Show (frm2.GetStrValue ); //通过该实例的内部成员对它进行访问 .显示.结果: How do you do?" MessageBox.Show (Form_Form1.myTestStr1 ); //直接访问. 显示.结果:" How do you do?" } 二、在Windows窗体开发中使用Cache Cache在程序设计时可以带来很大的便利,这点想必在web程序开发中大家都有深刻的体会!同样,在windows程序设计中也可以使用它。 使用时需要将web引用添加到窗体项目的引用中,下面以一个实例介绍之! 首先要将程序的Main()函数放在一个添加的类里,这里就是AppMain类。下面是AppMain类的代码: using System; using System.Threading; using System.Web;//添加引用 using System.Web.Caching; //添加引用 using System.Windows.Forms; namespace WindowsApplication1 { public class AppMain { private static HttpRuntime _httpRuntime; public static Cache Cache { get { EnsureHttpRuntime(); return HttpRuntime.Cache; } } [STAThread] static void Main() { Application.Run(new Form1()); } private static void EnsureHttpRuntime() { if( null == _httpRuntime ) { try { Monitor.Enter( typeof( AppMain ) ); if( null == _httpRuntime ) { // Create an Http Content to give us access to the cache. _httpRuntime = new HttpRuntime(); } } finally { Monitor.Exit( typeof( AppMain ) ); } } } } } 然后在Form1窗体中定义和使用Cache,代码如下: using System; using System.Web;//添加引用 using System.Web.Caching; //添加引用 using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace WindowsApplication1 { ///<summary> /// Form1 的摘要说明。 ///</summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox txtValueToPutInCache; private System.Windows.Forms.TextBox txtValueInCache; private System.Windows.Forms.Button btnPutInCache; private System.Windows.Forms.Button btnGetFromButton; private const string CACHE_KEY = "APPCACHEKEY"; ///<summary> /// Required designer variable. ///</summary> private System.ComponentModel.Container components = null; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } ///<summary> /// Clean up any resources being used. ///</summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code ///<summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. ///</summary> private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.txtValueToPutInCache = new System.Windows.Forms.TextBox(); this.txtValueInCache = new System.Windows.Forms.TextBox(); this.btnPutInCache = new System.Windows.Forms.Button(); this.btnGetFromButton = new System.Windows.Forms.Button(); this.SuspendLayout(); // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(8, 16); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(113, 16); this.label1.TabIndex = 0; this.label1.Text = "Value to put in cache:"; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(8, 40); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(95, 16); this.label2.TabIndex = 1; this.label2.Text = "Value from cache:"; // // txtValueToPutInCache // this.txtValueToPutInCache.Location = new System.Drawing.Point(128, 16); this.txtValueToPutInCache.Name = "txtValueToPutInCache"; this.txtValueToPutInCache.Size = new System.Drawing.Size(200, 20); this.txtValueToPutInCache.TabIndex = 2; this.txtValueToPutInCache.Text = ""; // // txtValueInCache // this.txtValueInCache.Location = new System.Drawing.Point(128, 40); this.txtValueInCache.Name = "txtValueInCache"; this.txtValueInCache.ReadOnly = true; this.txtValueInCache.Size = new System.Drawing.Size(200, 20); this.txtValueInCache.TabIndex = 3; this.txtValueInCache.Text = ""; // // btnPutInCache // this.btnPutInCache.Location = new System.Drawing.Point(352, 16); this.btnPutInCache.Name = "btnPutInCache"; this.btnPutInCache.Size = new System.Drawing.Size(104, 23); this.btnPutInCache.TabIndex = 4; this.btnPutInCache.Text = "Put in Cache"; this.btnPutInCache.Click += new System.EventHandler(this.btnPutInCache_Click); // // btnGetFromButton // this.btnGetFromButton.Location = new System.Drawing.Point(352, 40); this.btnGetFromButton.Name = "btnGetFromButton"; this.btnGetFromButton.Size = new System.Drawing.Size(104, 23); this.btnGetFromButton.TabIndex = 5; this.btnGetFromButton.Text = "Get from Cache"; this.btnGetFromButton.Click += new System.EventHandler(this.btnGetFromButton_Click); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(488, 133); this.Controls.Add(this.btnGetFromButton); this.Controls.Add(this.btnPutInCache); this.Controls.Add(this.txtValueInCache); this.Controls.Add(this.txtValueToPutInCache); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion private void btnPutInCache_Click(object sender, System.EventArgs e) { AppMain.Cache.Insert( CACHE_KEY, txtValueToPutInCache.Text, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds( 60 ) ); } private void btnGetFromButton_Click(object sender, System.EventArgs e) { string value; value = AppMain.Cache[ CACHE_KEY ] as string; if( null == value ) { value = "[No value in the cache.]"; } txtValueInCache.Text = value; } } } 三、windows form参数传递过程 在Windows 程序设计中参数的传递,同样也是非常的重要的。 这里主要是通过带有参数的构造函数来实现的, 说明:Form1为主窗体,包含控件:文本框textBoxFrm1,多选框checkBoxFrm1和按钮buttonEdit; Form2为子窗体,包含控件:文本框textBoxFrm2,多选框checkBoxFrm2和按钮buttonOK,buttonCancel。 当我们新建一个窗体的时候,设计器会生成默认的构造函数: public Form2() { InitializeComponent(); } 它不带参数,既然我们要把Form1中的一些数据传到Form2中去,为什么不在Form2的构造函数里做文章呢? 假设我们要实现使Form2中的文本框显示Form1里textBoxFrm1的值,修改子窗体的构造函数: public Form2(string text) { InitializeComponent(); this.textBoxFrm2.Text = text; } 增加Form1中的修改按钮点击事件,处理函数如下: private void buttonEdit_Click(object sender, System.EventArgs e) { Form2 formChild = new Form2(this.textBoxFrm1.Text); formChild.Show(); } 我们把this.textBoxFrm1.Text作为参数传到子窗体构造函数,以非模式方式打开,这样打开的formChild的文本框就显示了”主窗体”文本,是不是很简单,接下来我们传一个boolean数据给子窗体。 Public Form2(string text,bool checkedValue) { InitializeComponent(); this.textBoxFrm2.Text = text; this.checkBoxFrm2.Checked = checkedValue; } private void buttonEdit_Click(object sender, System.EventArgs e) { Form2 formChild = new Form2(this.textBoxFrm1.Text,this.checkBoxFrm1.Checked); formChild.Show(); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |