wpf windows窗体体开发中怎么才能把system. EventArgs转换为system.windows.Forms.MouseEventArgs

sponsored links
1.窗体与界面设计窗体效果
在项目开发中的窗体的设计会影响用户对软件的整体印象,因此窗体的效果要设计得美观一些。
029 制作鼠标穿透窗体
在对桌面进行操作时,为了使桌面更加美观,可以在桌面的上面加一层类似于玻璃的效果,用户可以用鼠标透过&玻璃&对桌面进行操作。本实例通过使用鼠标穿透窗体类实现以上功能。主要用到了 API 函数 SetWindowLong 和 GetWindowLong。
1.创建一个项目,默认窗体为 Form1,将该窗体的 FormBordeStyle 属性设置为 None,BackColor 属性设置为 Gainsboro,Opacity 属性设置为 60%,WindowState 属性设置为 Maximized。
2.在 Form1 窗体中添加一个 NotifyIcon 控件,并设置其 Icon 属性为指定的图标,显示提示信息;添加一个 ContextMenuStrip 控件,作为程序的快捷菜单。
namespace _029_MouseThroughForm
public partial class Form1 : Form
public Form1()
InitializeComponent();
private const uint WS_EX_LAYERED = 0x80;
private const int WS_EX_TRANSPARENT = 0x20;
private const int GWL_EXSTYLE = (-20);
private string Var_genre = "";//记录当前操作的类型
#region 在窗口结构中为指定的窗口设置信息
/// &summary&
/// 在窗口结构中为指定的窗口设置信息
/// &/summary&
/// &param name="hwnd"&欲为其取得信息的窗口的句柄&/param&
/// &param name="nIndex"&欲取回的信息&/param&
/// &param name="dwNewLong"&由nIndex指定的窗口信息的新值&/param&
/// &returns&&/returns&
[DllImport("user32", EntryPoint = "SetWindowLong")]
private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);
#endregion
#region 从指定窗口的结构中取得信息
/// &summary&
/// 从指定窗口的结构中取得信息
/// &/summary&
/// &param name="hwnd"&欲为其获取信息的窗口的句柄&/param&
/// &param name="nIndex"&欲取回的信息&/param&
/// &returns&&/returns&
[DllImport("user32", EntryPoint = "GetWindowLong")]
private static extern uint GetWindowLong(IntPtr hwnd, int nIndex);
#endregion
#region 使窗口有鼠标穿透功能
/// &summary&
/// 使窗口有鼠标穿透功能
/// &/summary&
private void CanPenetrate()
uint intExTemp = GetWindowLong(this.Handle, GWL_EXSTYLE);
//从当前窗口的结构中取得信息
//在窗口结构中为当前窗口设置信息
uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT
WS_EX_LAYERED);
#endregion
private void Form1_Load(object sender, EventArgs e)
this.ShowInTaskbar =//窗体不出现在Windows任务栏中
CanPenetrate();//自定义方法,用来通过API函数SetWindowLong和GetWindowLong实现鼠标的穿透效果
this.TopMost =//使窗体始终在其它窗体之上
#region 设置颜色和透明度的状态
/// &summary&
/// 设置颜色和透明度的状态
/// &/summary&
private void SetEstate(Form Frm, object sender)
Var_genre = ((ToolStripMenuItem)sender).N
string Tem_Str = Var_
if (Var_genre.IndexOf('_') &= 0)
Var_genre = Tem_Str.Substring(0, Tem_Str.IndexOf('_'));
switch (Var_genre)
case "ToolColor":
Color Tem_Color = Color.G
switch (Convert.ToInt32(((ToolStripMenuItem)sender).Tag.ToString()))
case 1: Tem_Color = Color.G
case 2: Tem_Color = Color.DarkO
case 3: Tem_Color = Color.RoyalB
case 4: Tem_Color = Color.G
case 5: Tem_Color = Color.LightG
Frm.BackColor = Tem_C
case "ToolClarity":
double Tem_Double = 0.0;
switch (Convert.ToInt32(((ToolStripMenuItem)sender).Tag.ToString()))
case 1: Tem_Double = 0.1;
case 2: Tem_Double = 0.2;
case 3: Tem_Double = 0.3;
case 4: Tem_Double = 0.4;
case 5: Tem_Double = 0.5;
case 6: Tem_Double = 0.6;
case 7: Tem_Double = 0.7;
case 8: Tem_Double = 0.8;
case 9: Tem_Double = 0.9;
Frm.Opacity = Tem_D
case "ToolAcquiescence":
Frm.BackColor = Color.G
Frm.Opacity = 0.6;
case "ToolClose":
#endregion
private void ToolColor_Glass_Click(object sender, EventArgs e)
SetEstate(this, sender);
030 窗体换肤程序
本实例的基本原理是给窗体的各个组成部分更换图片,基于该原理,首先需要分析窗体的组成部分,主要包括标题栏、左边框、右边框、下边框、窗体中间区域及可能存在的菜单栏,其中标题栏和3个边框无法通过设置相关属性来达到更换背景图片的目的。对于这个问题,可以通过取消窗体的 FormBorderStyle 属性,同时在标题栏和3个边框的位置添加 Panel 控件来解决,然后通过选择不同的皮肤类型,为窗体的各个组成部分设置图片,最终达到窗体换肤的效果。在以上过程中,最主要的技术问题是如何从指定的文件创建 Image 对象,以及如何获取图片的路径。
1.创建一个项目,默认窗体为 Form1,设置 Form1 的 AutoscaleMode 属性为 Inherit,DoubleBuffered 属性为 True,IsMdiContainer 属性为 True。
2.在窗体中添加6个 Panel 控件,分别用来作为窗体的标题栏、下边框、左边框、右边框、边框和边框;添加一个 ContextMenuStrip 控件,用来作为更换皮肤的快捷菜单;添加3个 PictureBox 控件,分别用来显示最大化、最小化和关闭图片。
namespace _030_WinCusSkin
public partial class Form1 : Form
String strImagesPath = Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"));
int top, left, hei,
bool bol = false, bo = false, bolTop = false, bolLeft = false, bolRight = false, bolBottom = false, bolLeftCornu = false, bolRightCornu =
int x = 0, y = 0;
public Form1()
InitializeComponent();
//关闭事件。
private void picClose_Click(object sender, System.EventArgs e)
Application.Exit();
//最大化事件。
private void picMaximize_Click(object sender, System.EventArgs e)
//若窗体处于普通状态
top = this.T
//获取窗体的Top属性值
left = this.L
//获取窗体的Left属性值
hei = this.H
//获取窗体的Height属性值
wid = this.W
//获取窗体的Width属性值
this.Top = 0;
//设置窗体的Top属性值为零
this.Left = 0;
//设置窗体的Left属性值为零
int hg = SystemInformation.MaxWindowTrackSize.H
//获取窗口的默认最大高度
int wh = SystemInformation.MaxWindowTrackSize.W
//获取窗口的默认最大宽度
this.Height =
//设置窗体的Height属性值
this.Width =
//设置窗体的Width属性值
//设置窗体标记表示最大化
if (menItemSkin1.Checked)
//若选择&紫色小花&菜单项,设置最大化图片的Image属性
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\purple\max.png");
if (menItemSkin2.Checked)
//若选择&蓝色经典&菜单项,设置最大化图片的Image属性
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\blue\max.png");
if (menItemSkin3.Checked)
//若选择&绿色菜园&菜单项,设置最大化图片的Image属性
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\green\max.png");
//若窗体处于最大化状态
this.Top =
//设置窗体的Top属性值
this.Left =
//设置窗体的Left属性值
this.Height =
//设置窗体的Height属性值
this.Width =
//设置窗体的Width属性值
//设置窗体标记表示普通状态
if (menItemSkin1.Checked)
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\purple\max_Normal.png");
if (menItemSkin2.Checked)
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\blue\max_Normal.png");
if (menItemSkin3.Checked)
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\green\max_Normal.png");
//最小化事件。
private void picMinimize_Click(object sender, System.EventArgs e)
top = this.T
left = this.L
hei = this.H
wid = this.W
this.Height = 0;
this.Width = 0;
//窗口再次被激活时。
private void Form_Activated(object sender, System.EventArgs e)
this.Top =
this.Left =
this.Height =
this.Width =
//选择关闭。
private void mItemColse_Click(object sender, System.EventArgs e)
Application.Exit();
//上边框鼠标按下。
private void panel_Top_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolTop =
//上边框鼠标移动。
private void panel_Top_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
if (bolTop)
this.Top += e.Y -
this.Left += e.X -
//上边框鼠标释放。
private void panel_Top_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolTop =
//左边框鼠标按下。
private void panel_Left_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolLeft =
//左边框鼠标移动。
private void panel_Left_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
if (bolLeft)
this.Width += x - e.X;
this.Left += e.X -
//左边框鼠标离开。
private void panel_Left_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolLeft =
//右边框鼠标按下。
private void panel_Right_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolRight =
//右边框鼠标移动。
private void panel_Right_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
if (bolRight)
this.Width += e.X -
//右边框鼠标离开。
private void panel_Right_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolRight =
//下边框鼠标按下。
private void panel_Bottom_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolBottom =
//下边框鼠标移动。
private void panel_Bottom_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
if (bolBottom)
this.Height += e.Y -
//下边框鼠标离开。
private void panel_Bottom_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolBottom =
//鼠标按下。
private void panelLeftCornu_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolLeftCornu =
//鼠标移动。
private void panelLeftCornu_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
if (bolLeftCornu)
this.Width += x - e.X;
this.Left += e.X -
this.Height += e.Y -
//鼠标离开。
private void panelLeftCornu_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolLeftCornu =
//鼠标按下。
private void panelRightCornu_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolRightCornu =
//鼠标移动。
private void panelRightCornu_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
if (bolRightCornu)
this.Width += e.X -
this.Height += e.Y -
//鼠标离开。
private void panelRightCornu_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
this.bolRightCornu =
private void Form_Load(object sender, EventArgs e)
menItemSkin2_Click(sender, e);//默认蓝色经典
private void menItemSkin1_Click(object sender, EventArgs e)
//设置Panel控件的BackgroundImage属性
this.panel_Top.BackgroundImage = Image.FromFile(strImagesPath + @"\images\purple\top.png");
this.panel_Left.BackgroundImage = Image.FromFile(strImagesPath + @"\images\purple\left.png");
this.panel_Right.BackgroundImage = Image.FromFile(strImagesPath + @"\images\purple\right.png");
this.panel_Bottom.BackgroundImage = Image.FromFile(strImagesPath + @"\images\purple\bottom.png");
//设置最小化图片控件的Image属性
this.picMinimize.Image = Image.FromFile(strImagesPath + @"\images\purple\min.png");
if (bol == true)
//若当前窗体处于最大化状态
//设置最大化图片控件的Image属性
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\purple\max.png");
//设置最大化图片控件的Image属性
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\purple\max_normal.png");
//设置关闭图片控件的Image属性
this.picClose.Image = Image.FromFile(strImagesPath + @"\images\purple\close.png");
//设置菜单的选中标记
this.menItemSkin1.Checked =
this.menItemSkin2.Checked =
this.menItemSkin3.Checked =
//设置窗体主菜单的背景图像属性
this.menuStrip1.BackgroundImage = Image.FromFile(strImagesPath + @"\images\purple\menu.gif");
//设置窗体的背景图像属性
this.BackgroundImage = Image.FromFile(strImagesPath + @"\images\purple\background.gif");
private void menItemSkin2_Click(object sender, EventArgs e)
this.panel_Top.BackgroundImage = Image.FromFile(strImagesPath + @"\images\blue\top.png");
this.panel_Left.BackgroundImage = Image.FromFile(strImagesPath + @"\images\blue\left.png");
this.panel_Right.BackgroundImage = Image.FromFile(strImagesPath + @"\images\blue\right.png");
this.panel_Bottom.BackgroundImage = Image.FromFile(strImagesPath + @"\images\blue\bottom.png");
this.picMinimize.Image = Image.FromFile(strImagesPath + @"\images\blue\min.png");
if (bol == true)
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\blue\max.png");
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\blue\max_normal.png");
this.picClose.Image = Image.FromFile(strImagesPath + @"\images\blue\close.png");
this.menItemSkin1.Checked =
this.menItemSkin2.Checked =
this.menItemSkin3.Checked =
this.menuStrip1.BackgroundImage = Image.FromFile(strImagesPath + @"\images\blue\menu.gif");
this.BackgroundImage = Image.FromFile(strImagesPath + @"\images\blue\background.gif");
private void menItemSkin3_Click(object sender, EventArgs e)
this.panel_Top.BackgroundImage = Image.FromFile(strImagesPath + @"\images\green\top.png");
this.panel_Left.BackgroundImage = Image.FromFile(strImagesPath + @"\images\green\left.png");
this.panel_Right.BackgroundImage = Image.FromFile(strImagesPath + @"\images\green\right.png");
this.panel_Bottom.BackgroundImage = Image.FromFile(strImagesPath + @"\images\green\bottom.png");
this.picMinimize.Image = Image.FromFile(strImagesPath + @"\images\green\min.png");
if (bol == true)
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\green\max.png");
this.picMaximize.Image = Image.FromFile(strImagesPath + @"\images\green\max_normal.png");
this.picClose.Image = Image.FromFile(strImagesPath + @"\images\green\close.png");
this.menItemSkin1.Checked =
this.menItemSkin2.Checked =
this.menItemSkin3.Checked =
this.menuStrip1.BackgroundImage = Image.FromFile(strImagesPath + @"\images\green\menu.gif");
this.BackgroundImage = Image.FromFile(strImagesPath + @"\images\green\background.gif");
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
Application.Exit();
private void panel_Top_DoubleClick(object sender, EventArgs e)
picMaximize_Click(sender, e);
在窗体上添加一些动画效果,可以为操作者添加一些乐趣. 031 窗体中的滚动字幕 滚动字幕的效果其实就是改变文字的位置,在窗体上显示一串文字最好的办法就是利用 Label 控件.将 Label 控件的位置改变就可以实现文字的位置变换,如果该控件的位置不断的向水平方向移动,就会实现文字的滚动效果.改变 Label 控件的水平位置可以通过改变 Label 控件的
主要介绍如何动态创建窗体,在窗体关闭前加入提示信息以及任意控制窗体移动等相关技术,这些都是在实际开发中被广泛应用的技术. 044 在关闭窗口前加入确认对话框 窗口正要关闭但是没有关闭之前会触发 FormClosing 事件,该事件中的参数 FormClosing EventArgs e 中包含 Cancel 属性,如果设置该属性为 True,窗口将不会被关闭 ...
C#实例:5个.net经典例子(窗体与界面设计) 实例001
带历史信息的菜单 实例说明 在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以方便下次使用.如图1.1所示,单击“文件”菜单下的“打开文件”子菜单,打开需要查阅的图纸.下次运行该软件时,上次打开的文件名记录到“文件”菜单的历史菜单中,选择该菜单,即可打开相应的图纸文件. 技术要点 ...
1.窗体与界面设计-设置窗体位置
在很多软件中,都会对窗体的大小.位置和移动进行限定.在不同分辨率的显示器中如何正确显示窗体,如何设置窗体始终在最上面... 038 设置窗体在屏幕中的位置 设置窗体在屏幕中的位置,可以通过设置窗体的属性来实现.窗体的 Left 属性表示窗体距屏幕左侧的距离,Top 属性表示窗体距屏幕上方的距离. 创建一个项目,默认窗体为 ...
在很多软件中,都会对窗体的大小.位置和移动进行限定.在不同分辨率的显示器中如何正确显示窗体,如何设置窗体始终在最上面... 038 设置窗体在屏幕中的位置 设置窗体在屏幕中的位置,可以通过设置窗体的属性来实现.窗体的 Left 属性表示窗体距屏幕左侧的距离,Top 属性表示窗体距屏幕上方的距离. 创建一个项目,默认窗体为 Form1,为 Form1 添加 L ...用户操作:
正在加载...
Control.OnMouseUp 方法 (MouseEventArgs)
System.Windows.Forms(位于 System.Windows.Forms.dll)
Protected Overridable Sub OnMouseUp (
e As MouseEventArgs
引发事件时,将通过委托调用事件处理程序。
OnMouseUp 方法还允许派生类对事件进行处理而不必附加委托。
这是在派生类中处理事件的首选技术。
在派生类中重写 OnMouseUp 时,一定要调用基类的 OnMouseUp 方法,以便已注册的委托对事件进行接收。
.NET Framework
自 1.1 起可用当前位置: &
无法将类型“System.EventHandler”隐式转换为“System.Windows.Forms.MouseEventHandler”
this.pictureBox2.Location=newSystem.Drawing.Point(0,50);this.pictureBox2.Name="pictureBox2";this.pictureBox2.Size=newSystem.Drawing.Size(230,50);this.pictureBox2.TabIndex=1;this.pictureBox2.TabStop=this.pictureBox2.Click+=newSystem.EventHandler(this.pictureBox2_Click);this.pictureBox2.MouseMove+=newSystem.EventHandler(this.pictureBox2_MouseMove);privatevoidpictureBox1_Click(objectsender,EventArgse){}privatevoidpictureBox1_MouseMove(objectsender,EventArgse){}错误1无法将类型“System.EventHandler”隐式转换为“System.Windows.Forms.MouseEventHandler”d:\study\computer\c#\test06\test06\Form1.Designer.cs5667test06为什么啊,想做个鼠标移过就改变图像的功能,怎么做啊?
&&&&&&&&private&void&pictureBox1_MouseMove(object&sender,&MouseEventHandler&e)&&&&&&&&{&&&&&&&&}&错误 1 “pictureBox1_MouseMove”的重载均与委托“System.EventHandler”不匹配 d:\study\computer\c#\test06\test06\Form1.Designer.cs 56 43 test06没用,还是错this.pictureBox1.MouseMove&+=&new&MouseEventHandler(pictureBox1_MouseMove);void&pictureBox1_MouseMove(object&sender,&MouseEventArgs&e)问题解决&&给分学习了,谢谢诶!控件上的不同事件对应着的委托类型是有区别的。&必须采用指定的委托。
本站所有文章全部来源于互联网,版权归属于原作者。本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(),我们收到后立即调整或删除。
我有一个例子:http://samy.pl/evercookie/到这里可以下载这个例子是php的我是学.net的,不懂php我改写的例子:http://download.csdn.net/detail/shatamadedongxi/4649476我用火狐调试时查看网络时发现:evercookie_cache.phpevercookie_etag.phpevercookie_png.php说这三...
我要用C#语言winform窗体获取twitter里面的正在关注的内容并把数据动态保存到数据库中,跪求各位大神帮忙啊...
我现在在做个功能用jquery做的校验。就是在登录的时候去查询一张表是否有记录,有的话在界面的右下角弹出一个div显示基本的数据。这个层显示在设定的时间在关闭,过一段时间了在自动弹出来。这个功能大家有好的例子嘛》借鉴下。
网站装了CNZZ流量统计。有这样http://192.168.1.1/hndUnblock.cgi的来路访问。请问这个是什么意思。百度,Google,都找不到答案。谢谢了。
请问下我动态添加的combobox为什么样式会不一样,按了f12准备调试的时候又正常了
我用gridview中的HyperlinkField连接到下一个页面,我要怎样设置被连接页面的代码,使上一页中的相应的行的信息显示出来。。
delegatevoidMyDelegate();structMyStruct{publicvoidmethod(){Console.WriteLine(mem);}}staticvoidMain(){MyDMyStructms=newMyStruct();ms.mem="A";md=ms.ms.mem="B";md();}本来以为...
先上一段代码,高手看看,为什么Web页面连接不到数据库。fanghuojianhujilurizhi是我的数据库的名字。DataGV是gridview控件的ID.namespaceElectLock.Manage{publicpartialclassfanghuojianhujilurizhi(数据库的名字):System.Web.UI.Page{protectedvoidPage_Load(ob...
通过联通拉了一根固定IP的光纤,接入交换机后,分出多根网线,这些网线分别接上一些电脑和几个无线路由器。公司有一台服务器使用的是交换机分出来的网线,IP为192.168.1.121,电脑名称为直接通过交换机分出的网线连接的电脑访问\\192.168.1.121或\\vserver都是可以访问服务器的而通过无线路由器上网的电脑或设备访问\\192.168.1.121可以访问服务器,但\...
有一串数字:-1,0,0.5,1,0,-1,-3,0,1,3,0,-1要求:取大于等于0.5的数直到出现负数为止,赋值数组1;然后循环检查,知道读完所有数字您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
分享(C高级编程第6版doc)第31章Windows窗体.doc 48页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
分享(C高级编程第6版doc)第31章Windows窗体
你可能关注的文档:
·········
第31章Windows 窗 体
基于Web的应用程序在过去几年非常流行。从管理员的角度来看,把所有的应用程序逻辑放在一个中央服务器上是非常吸引人的。但部署基于客户的软件会非常困难,特别是部署基于COM的客户软件。基于Web的应用程序的缺点是它们不能提供丰富的用户体验。.NET Framework允许开发人员创建丰富、智能的客户应用程序,而且不再有部署问题和以前的DLL Hell。无论选择Windows窗体还是WPF(参见第34章),客户应用程序都不再难以开发或部署。
Windows窗体已经对Windows开发产生了影响。当应用程序处于初始设计阶段时,是建立基于Web的应用程序还是建立客户应用程序已经很难抉择了。Windows客户应用程序开发起来非常快速和高效,它们可以为用户提供丰富的体验。
Visual Basic开发人员对Windows窗体应比较熟悉。创建新窗体(也称为窗口或对话框)也采用把控件从工具箱拖放到窗体设计器上的方式。但是,如果您在创建消息泵和监视消息时使用的是C样式的传统Windows编程,或者您是一位MFC程序员,就会发现现在可以获得需要的低级内部功能了。现在可以重写wndproc,捕获这些消息,但常常并不是真需要它们。
本章将主要介绍Windows窗体的如下方面:
●?Windows窗体的类层次结构
●?System.Windows.Forms命名空间中的控件和组件
●?菜单和工具栏
●?创建控件
●?创建用户控件
31.1? 创建Windows窗体应用程序
首先需要创建一个Windows窗体应用程序。下面的示例创建了一个空白窗体,并把它显示在屏幕上。这个示例没有使用Visual Studio 2008,而是在文本编辑器中输入代码,使用命令行编译器进行编译。下面是代码清单:
using S using System.Windows.F namespace NotepadForms { public calss MyForm : System.Windows.Forms.Form { public MyForm() { }
???? [STAThread] static void Main() { Application.Run(new MyForm()); } } }
在编译和运行这个示例时,会得到一个没有标题的小空白窗体。该窗体没有什么实际功能,但它却是一个Windows窗体。
代码中有两个地方需要注意。第一个是使用继承功能来创建MyForm类。下面的代码声明MyForm派生于System.Windows.Forms。
public calss MyForm : System.Windows.Forms.Form
Form类是System.Windows.Forms命名空间的一个主要类。代码的其他部分如下:
???? [STAThread] static void Main() { Application.Run(new MyForm()); }
Main是C#客户应用程序的默认入口。一般在大型应用程序中,Main()方法不位于窗体中,而是位于类中,它负责完成需要的启动处理。在本例中,我们在项目属性对话框中设置启动的类名。注意属性[STAThread],它把COM线程模型设置为单线程单元(Single-Threaded Apartment, STA)。COM交互操作需要STA线程模型,默认为添加到Windows窗体项目中。
Application.Run()方法负责启动标准的应用程序消息循环。它有3个重载版本:第一个重载版本不带参数,第二个重载版本把ApplicationContext对象作为其参数,本例中的第三个重载版本把窗体对象作为其参数。在这个示例中,MyForm对象是应用程序的主窗体,这表示在关闭这个窗体时,应用程序就结束了。使用ApplicationContext类,可以对主消息循环何时结束和应用程序何时退出有更多的控制权。
Application类包含一些非常有用的功能。它提供了一些静态方法和属性,用于控制应用程序的启动和停止过程,访问由应用程序处理的Windows消息。表31-1列出了其中一些比较有用的方法和属性。
CommonAppDataPath 对应用程序的所有用户都通用的数据路径。一般是BasePath\Company Name\Product Name\Version,其中BasePath是C:\Documents and Settings\ username\ApplicationData。如果该路径不存在,就创建一个
ExecutablePath 这是启动应用程序的可执行文件的路径和文件名
正在加载中,请稍后...
29页38页54页177页49页11页90页44页65页21页}

我要回帖

更多关于 windows窗体设计 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信