您的位置:首页 > 编程语言 > C#

关于c#webform 通用变量的几种办法

2015-11-12 10:26 405 查看
一、C#中的全局变量

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 Win
18474
dowsApplication1 

     ///<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(); 
         } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: