`
wolfmaster
  • 浏览: 159073 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C#中的全局变量 winform全局变量,传参,cache,datagrid简单介绍

    博客分类:
  • c#
阅读更多
一、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 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();
         }
分享到:
评论

相关推荐

    C# WinForm通过全局变量实现不同窗体之间传值的解决方案的源码.rar

    C# WinForm通过全局变量实现不同窗体之间传值的解决方案的源码

    C#代码高亮的WinForm的TEXTBOX控件

    C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码...

    C# winform开发 DataGrid带筛选功能

    在DataGrid中,筛选通常通过设置列的Filter表达式或提供一个筛选界面来实现。 步骤一:创建WinForm项目和DataGrid控件 1. 打开Visual Studio,创建一个新的C# Windows Forms应用程序项目。 2. 在设计视图中,从工具...

    C# 简单地在WinForm上放置一个有阴影边框的矩形面板

    C# 简单地在WinForm上放置一个有阴影边框的矩形面板C# 简单地在WinForm上放置一个有阴影边框的矩形面板C# 简单地在WinForm上放置一个有阴影边框的矩形面板C# 简单地在WinForm上放置一个有阴影边框的矩形面板C# 简单...

    C#俄罗斯方块(winform)

    C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)

    C# 日历(WinForm )万年历

    在本文中,我们将深入探讨如何使用C#编程语言在Windows Forms环境下开发一个功能丰富的日历应用,即“C# 日历(WinForm)万年历”。这个应用利用了.NET Framework中的DataGridview控件,提供了直观且易于操作的界面,...

    c#调用winapi实现WinForm中嵌入EXE程序

    C#中,在WinForm嵌入其他可执行程序

    C#winform窗体转盘抽奖

    【C# WinForm窗体转盘抽奖】是一个基于C#编程语言和Windows Forms(WinForm)框架实现的简单抽奖程序。这个程序的核心功能是通过模拟转盘转动效果,结合音频播放,来创建一个吸引人的抽奖体验。对于初学者来说,这是...

    WinformLoading_Loadingwinform_c#等待_winform加载动态窗口_

    下面将详细介绍如何在C#中创建和使用这样的等待窗口。 首先,我们需要了解WinForms中的线程概念。默认情况下,WinForms应用程序运行在一个单一的UI线程上,这意味着如果主线程被阻塞,整个用户界面就会变得无响应。...

    c# mqtt测试软件winform

    在本项目中,WinForm提供了简单易用的界面元素,如按钮、文本框等,让用户能直观地进行操作。 ### 3. M2MQTT库 M2MQTT是.NET平台上的一个开源MQTT客户端库,它实现了MQTT v3.1和v3.1.1规范。开发者可以利用这个库...

    c#winform开发框架

    C# WinForm开发框架是一种基于.NET Framework的桌面应用程序开发工具,它为开发者提供了一套完整的控件、设计模式和架构,使得创建具有丰富用户界面的Windows应用程序变得更加便捷和高效。这款框架尤其适合初学者,...

    C#锁定程序项目winform锁定界面

    在这个场景下,"C#锁定程序项目winform锁定界面"指的是如何在WinForm应用程序中实现界面的锁定功能。WinForm是.NET Framework中的一个组件,用于创建桌面应用的图形用户界面。锁定界面的功能对于保护用户隐私、防止...

    c# 的winform 获取系统中环境变量

    在"Example093-列举系统中的环境变量"这个例子中,很可能就是一个演示如何使用C#和WinForm来展示系统中所有环境变量的示例项目。通过打开这个项目,你可以看到具体的代码实现,学习如何将这些环境变量的获取和显示...

    C#,.net,winform上SVG的源代码和示例

    在本文中,我们将深入探讨如何在C# .NET WinForm应用程序中使用SVG(Scalable Vector Graphics)图形。SVG是一种开放标准的矢量图形格式,它允许开发者创建可缩放的、高质量的图形,适用于各种屏幕分辨率。由于...

    C# 修改winform程序中datagrid列头信息的实际例子源码

    C# 修改winform程序中datagrid列头信息的实际例子源码,内含讲解,和一段实际操作的例子,不错的知识点,供大家学习,我们都知道,再ASP.NET中的datagrid可以设置属性列的列头,但是在winform中却不能,所以提供这个...

    C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收

    C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 ...

    C#跨窗体(Winform)调用控件(委托回调)

    下面是一个简单的示例,展示如何在C# Winform中使用委托和回调: 1. 定义一个委托类型: ```csharp public delegate void CallBackMethod(string message); ``` 2. 在源窗体(Form1)中,创建一个方法,这个方法将...

    c# winform 绘制多行文本:自动换行:文本

    c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制...

    C# winform窗体间传值(使用委托或事件)

    C#winform窗体间传值,三种方法示例,注释详细。使用方法:使用vs2013打开编译运行即可; 工程中总共介绍了三种方法: ###方法1:通过保存对象的引用调用其方法实现对子窗体的控制; ###方法2:通过委托,在子窗体...

    c# winform实例大全(198个Csharp WinForm实例源码)

    《C# WinForm实例大全》是一份集合了198个Csharp WinForm应用程序实例的资源库,旨在帮助开发者深入理解和掌握C#编程语言在Windows桌面应用开发中的实践技巧。WinForm是.NET Framework中用于创建图形用户界面(GUI)...

Global site tag (gtag.js) - Google Analytics