一、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通过全局变量实现不同窗体之间传值的解决方案的源码
C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码...
在DataGrid中,筛选通常通过设置列的Filter表达式或提供一个筛选界面来实现。 步骤一:创建WinForm项目和DataGrid控件 1. 打开Visual Studio,创建一个新的C# Windows Forms应用程序项目。 2. 在设计视图中,从工具...
C# 简单地在WinForm上放置一个有阴影边框的矩形面板C# 简单地在WinForm上放置一个有阴影边框的矩形面板C# 简单地在WinForm上放置一个有阴影边框的矩形面板C# 简单地在WinForm上放置一个有阴影边框的矩形面板C# 简单...
C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)C#俄罗斯方块(winform)
在本文中,我们将深入探讨如何使用C#编程语言在Windows Forms环境下开发一个功能丰富的日历应用,即“C# 日历(WinForm)万年历”。这个应用利用了.NET Framework中的DataGridview控件,提供了直观且易于操作的界面,...
C#中,在WinForm嵌入其他可执行程序
【C# WinForm窗体转盘抽奖】是一个基于C#编程语言和Windows Forms(WinForm)框架实现的简单抽奖程序。这个程序的核心功能是通过模拟转盘转动效果,结合音频播放,来创建一个吸引人的抽奖体验。对于初学者来说,这是...
下面将详细介绍如何在C#中创建和使用这样的等待窗口。 首先,我们需要了解WinForms中的线程概念。默认情况下,WinForms应用程序运行在一个单一的UI线程上,这意味着如果主线程被阻塞,整个用户界面就会变得无响应。...
在本项目中,WinForm提供了简单易用的界面元素,如按钮、文本框等,让用户能直观地进行操作。 ### 3. M2MQTT库 M2MQTT是.NET平台上的一个开源MQTT客户端库,它实现了MQTT v3.1和v3.1.1规范。开发者可以利用这个库...
C# WinForm开发框架是一种基于.NET Framework的桌面应用程序开发工具,它为开发者提供了一套完整的控件、设计模式和架构,使得创建具有丰富用户界面的Windows应用程序变得更加便捷和高效。这款框架尤其适合初学者,...
在这个场景下,"C#锁定程序项目winform锁定界面"指的是如何在WinForm应用程序中实现界面的锁定功能。WinForm是.NET Framework中的一个组件,用于创建桌面应用的图形用户界面。锁定界面的功能对于保护用户隐私、防止...
在"Example093-列举系统中的环境变量"这个例子中,很可能就是一个演示如何使用C#和WinForm来展示系统中所有环境变量的示例项目。通过打开这个项目,你可以看到具体的代码实现,学习如何将这些环境变量的获取和显示...
在本文中,我们将深入探讨如何在C# .NET WinForm应用程序中使用SVG(Scalable Vector Graphics)图形。SVG是一种开放标准的矢量图形格式,它允许开发者创建可缩放的、高质量的图形,适用于各种屏幕分辨率。由于...
C# 修改winform程序中datagrid列头信息的实际例子源码,内含讲解,和一段实际操作的例子,不错的知识点,供大家学习,我们都知道,再ASP.NET中的datagrid可以设置属性列的列头,但是在winform中却不能,所以提供这个...
C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 C# Socket通信(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窗体间传值,三种方法示例,注释详细。使用方法:使用vs2013打开编译运行即可; 工程中总共介绍了三种方法: ###方法1:通过保存对象的引用调用其方法实现对子窗体的控制; ###方法2:通过委托,在子窗体...
《C# WinForm实例大全》是一份集合了198个Csharp WinForm应用程序实例的资源库,旨在帮助开发者深入理解和掌握C#编程语言在Windows桌面应用开发中的实践技巧。WinForm是.NET Framework中用于创建图形用户界面(GUI)...