实例001  带历史信息的菜单

实例说明

在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以方便下次使用。如图1.1所示,单击“文件”菜单下的“打开文件”子菜单,打开需要查阅的图纸。下次运行该软件时,上次打开的文件名记录到“文件”菜单的历史菜单中,选择该菜单,即可打开相应的图纸文件。

技术要点

要实现保存最近打开的文件,可以将在菜单中最近打开文件的文件名和路径保存到事先建立的*.ini文件中,系统启动时读取*.ini中的数据建立数组菜单,即可实现显示历史菜单的功能。

注意:要建立一个带历史信息的菜单,必须首先添加一个MenuStrip菜单控件,并将主窗体的IsMdiContainer属性设为True。

实现过程

(1)创建一个项目,将其命名为Ex01_01,默认窗体为Form1。

(2)从工具箱中向Form1窗体添加MenuStrip控件,同时向窗体添加OpenFileDialog控件。创建一个“文件”主菜单,在其下面创建打开、关闭所有、退出等菜单选项。

(3)主要程序代码。

将打开文件路径写入INI文件的实现代码如下:

private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)

{

openFileDialog1.FileName = "";

this.openFileDialog1.ShowDialog();

StreamWriter s = new StreamWriter(address + "\\Menu.ini", true);

s.WriteLine(openFileDialog1.FileName);//写入INI文件

s.Flush();

s.Close();

ShowWindows(openFileDialog1.FileName);

}

读取INI文件并将信息加入菜单的实现代码如下:

private void Form1_Load(object sender, EventArgs e)

{

StreamReader sr = new StreamReader(address + "\\Menu.ini");

int i = this.文件ToolStripMenuItem.DropDownItems.Count-2;

while (sr.Peek()>=0)//读取INI文件

{

ToolStripMenuItem menuitem = new ToolStripMenuItem(sr.ReadLine());

this.文件ToolStripMenuItem.DropDownItems.Insert(i, menuitem);

i++;

menuitem.Click += new EventHandler(menuitem_Click);

}

sr.Close();

}

自定义方法ShowWindows()用来加载背景图片并显示窗体,实现代码如下:

public void ShowWindows(string fileName)

{

Image p = Image.FromFile(fileName);

Form f = new Form();

f.MdiParent = this;

f.BackgroundImage = p;

f.Show();

}

举一反三

根据本实例,读者可以开发以下程序。

记录用户操作菜单日志的程序。在用户单击菜单时,把用户、菜单命令和菜单对应功能写入保存菜单日志的INI文件。如果需要查看日志,只需打开INI文件。

通过数据库保存菜单历史信息的程序。

菜单使用频率的程序。把用户使用菜单的数据信息保存到数据库中,然后统计用户使用菜单的频率,并根据此频率调整菜单的显示顺序。

实例002  菜单动态合并

实例说明

在程序中经常使用弹出菜单,并且一个窗体中可以存在多个弹出菜单。开发过MDI窗体的读者可能都知道,当MDI子窗体最大化时,子窗体和主窗体的菜单能够自动的合并。这是如何实现的呢?本例实现了将两个弹出菜单动态的合并成一个弹出菜单的功能。实例效果如图1.2所示。

技术要点

C# 2.0中已经将弹出菜单封装为Context MenuStrip控件,利用该控件中的Items对象可以操作菜单中的菜单项。该对象是ToolStripMenuItem类型,使用Items.AddRange( )方法可以向弹出菜单中添加菜单项,该方法原型如下。

public void AddRange (

ToolStripItem[] toolStripItems

)

参数说明如下。

l     toolStripItems:控件的数组。

实现过程

(1)创建一个项目,将其命名为Ex01_02,默认窗体为Form1。

(2)从工具箱中向Form1窗体添加一个MenuStrip控件用来设计菜单;同时向窗体添加ContextMenuStrip控件用来设计右键菜单;选中MenuStrip控件创建一个“打开子窗体”主菜单,然后选中ContextMenuStrip控件为其添加子项。

(3)为程序添加一个窗体,默认名为Form2,同时向窗体添加ContextMenuStrip控件用来设计右键菜单,然后选中ContextMenuStrip控件为其添加子项。

(4)主要程序代码。

private void 打开自窗体ToolStripMenuItem_Click(object sender, EventArgs e)

{

Form2 f= new Form2();

f.MdiParent = this;

f.Show();//显示子窗体

f.Resize += new EventHandler(f_Resize);

}

void f_Resize(object sender, EventArgs e)

{

Form2 f= (Form2)sender;

ToolStripMenuItem item = new ToolStripMenuItem();

for (int i = 0; i < f.contextMenuStrip2.Items.Count; )//合并菜单

{

item.DropDownItems.Add(f.contextMenuStrip2.Items[i]);

}

this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {

item});

}

举一反三

根据本实例,读者可以实现以下功能。

让右键菜单在子窗体中显示。

让右键菜单在主窗体和子窗体中同时显示。

实例003  像开始菜单一样漂亮的菜单

实例说明

Windows的开始菜单非常的独特,在菜单的旁边有一条竖着的彩条,彩条中还写着文字。这种独特的菜单能够使程序的界面看起来更加的漂亮。本例中就实现了这种菜单,运行本例弹出“打开菜单”时,就会看到菜单的左边有一个紫色的彩条。实例效果如图1.3所示。

技术要点

在C# 2.0中,MenuStrip控件中的子项ToolStripMenuItem已经包括了左侧的彩条,实现像开始菜单一样的菜单非常容易,不像在其他计算机语言的开发环境中,需要调用API才可以实现。如果想改变左侧竖着的彩条,只要给对应的菜单项设置相应的图片即可。

注意:如果要在左侧彩条显示文字,只要在对应的图片上加入文字即可。

实现过程

(1)创建一个项目,将其命名为Ex01_03,默认窗体为Form1。

(2)从工具箱中向Form1窗体添加MenuStrip控件。

(3)为MenuStrip控件添加相应的子项。

(4)为子项添加相应的图片。

举一反三

根据本实例,读者可以实现以下功能。

将菜单元设置成不同的格式(如图片、文字等)。

在菜单左侧播放动画。

实例004  任务栏托盘菜单

实例说明

有一些软件通常只是在后台运行,这些进程大部分时间不显示用户界面。可通过单击任务栏状态通知区域的图标来访问的病毒防护程序就是一个示例。Windows窗体中的NotifyIcon控件通常用于显示在后台运行的进程的图标,本实例利用该控件制作了一个任务栏托盘菜单。实例效果如图1.4所示。

技术要点

要实现程序启动时出现在系统托盘中。必须要为窗体添加NotifyIcon 控件和ContextMenuStrip控件。

注意:必须为NotifyIcon 控件的Icon属性设置图标。

实现过程

(1)创建一个项目,将其命名为Ex01_04,默认窗体为Form1。

(2)向Form1窗体添加NotifyIcon 控件和ContextMenuStrip控件,并为ContextMenuStrip控件添加子项。

(3)选择NotifyIcon 控件,在其属性窗口中将ContextMenuStrip属性设置为添加到窗体上的ContextMenuStrip控件,并为Icon属性设置图片。

举一反三

根据本实例,读者可以开发以下程序。

程序启动时不出现界面,直接出现在系统托盘中运行的后台程序。

程序启动时不出现在任务栏中。

实例005  可以拉伸的菜单界面

实例说明

如果管理程序功能菜单非常多,而用户只使用一些常用菜单,这时,可以将主菜单项下的不常用菜单隐藏起来。此种显示方式类似于对菜单进行拉伸。使用时,只需单击展开菜单,即可显示相应菜单功能。运行本例,效果如图1.5所示。

技术要点

要实现可以拉伸的菜单,关键是要使用一个开关变量,同时调用ShowDropDown()方法,显示操作后的结果。下面详细介绍一下该方法。

ShowDropDown()方法用来显示与此ToolStripDrop DownItem关联的ToolStripDropDownItem控件。其语法结构如下:

public void ShowDropDown ()

另外,用ShowDropDown()方法还可以显示已由 DropDown 属性设置的下拉控件。

注意:必须设置开关变量的初值。

实现过程

(1)创建一个项目,将其命名为Ex01_05,默认窗体为Form1。

(2)从工具箱中向Form1窗体添加MenuStrip控件,选中MenuStrip控件为其添加子项。

(3)双击“展开(关闭)子项”为其双击事件添加处理代码。

(4)主要程序代码。

private void Form1_Load(object sender, EventArgs e)

{

//初始设置下面的菜单隐藏

this.设置密码ToolStripMenuItem.Visible = false;

this.添加用户ToolStripMenuItem.Visible = false;

this.忘记密码ToolStripMenuItem.Visible = false;

this.修改密码ToolStripMenuItem.Visible = false;

this.员工录入ToolStripMenuItem.Visible = false;

}

private void toolStripMenuItem1_Click(object sender, EventArgs e)

{

switch  (i)

{

case 1:

this.设置密码ToolStripMenuItem.Visible = false;

this.添加用户ToolStripMenuItem.Visible = false;

this.忘记密码ToolStripMenuItem.Visible = false;

this.修改密码ToolStripMenuItem.Visible = false;

this.员工录入ToolStripMenuItem.Visible = false;

i = 2;

this.操作ToolStripMenuItem.ShowDropDown();

break;

case 2:

this.设置密码ToolStripMenuItem.Visible = true;

this.添加用户ToolStripMenuItem.Visible = true;

this.忘记密码ToolStripMenuItem.Visible = true;

this.修改密码ToolStripMenuItem.Visible = true;

this.员工录入ToolStripMenuItem.Visible = true;

i = 1;

this.操作ToolStripMenuItem.ShowDropDown();

break;

}

}

举一反三

根据本实例,读者可以开发以下功能。

制作显示\隐藏工具栏。

合并菜单栏。

C#实例:5个.net经典例子(窗体与界面设计)的更多相关文章

  1. (转)c语言_链表实例讲解(两个经典例子)

    建立一个学生成绩的线性链表,对其实现插入,删除,输出,最后销毁. #include <stdio.h>#include <stdlib.h> struct grade {    ...

  2. c语言_链表实例讲解(两个经典例子)

    建立一个学生成绩的线性链表,对其实现插入,删除,输出,最后销毁. demo1 // lianbiao.cpp : Defines the entry point for the console app ...

  3. C#实例.net_经典例子400个

    一共470多例winform 界面特效的源码. 窗体与界面设计... 9 实例001  带历史信息的菜单    10 实例002  菜单动态合并    12 实例003  像开始菜单一样漂亮的菜单.. ...

  4. python之路第五篇之递归(进阶篇:续:经典例子剖析)

    递归 在函数内部,可以调用其他函数; 如果一个函数在内部调用自身本身,这个函数就是递归函数. 例如,我们来计算阶乘: n! = 1 x 2 x 3 x ... x n, 用函数f1(n)表示,可以看出 ...

  5. jQuery监听事件经典例子

    关键字:jQuery监听事件经典例子  js代码:  ============================================================  $(function( ...

  6. linux Posix 信号量 三 (经典例子)

    本文将阐述一下信号量的作用及经典例子,当中包括“<越狱>寄信”,“家庭吃水果”,“五子棋”,“接力赛跑”,“读者写者”,“四方恋爱”等 首先,讲 semWait操作(P操作)和semSig ...

  7. sql优化经典例子

    场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表 create table Course( c_id int PRIMARY KEY, name varchar(10) ) 数据10 ...

  8. 转:一个经典例子让你彻彻底底理解java回调机制

    一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...

  9. DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法

    原文:DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...

随机推荐

  1. 经历:sybase的sql查询,当传递的参数中包含全角空格(\u00a0),查询慢

    今天,我遇到了一个sybase数据库查询的问题.一句简单的sql,但是不知道为什么查询不出来,导致生产生产服务器频频挂掉.吓得我的小心脏砰砰啊. select DISTINCT A.FCIL_CDE ...

  2. linux命令打开程序

    evince 打开pdf firefox 打开浏览器

  3. mkisofs出错解决办法

    使用mkisofs遇到错误: genisoimage: Uh oh, I cant find the boot catalog directory 'beini/boot/isolinux'! 使用的 ...

  4. jquery 文本框失去焦点显示提示信息&&单击置空文本框

    1.<textarea rows="4" placeholder="请输入提醒内容"></textarea> 2. /** * @par ...

  5. Codevs 1697 ⑨要写信

    1697 ⑨要写信 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 琪露诺(冰之妖精)有操控冷气的能力.能瞬间冻结小东西,比 ...

  6. 【BZOJ3270】【高斯消元】博物馆

    Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...

  7. 浏览器信息(Navigator)

    window.navigator 代表正在使用的浏览器的对象. ◆ window.navigator.appCodeName 返回浏览器的代码名."Mozilla" 本来是 Net ...

  8. struts2与spring集成时action的class属性值意义

    struts2单独使用时action由struts2自己负责创建:与spring集成时,action实例由spring负责创建(依赖注入).这导致在两种情况下struts.xml配置文件的略微差异. ...

  9. 转换rgb为16进制颜色值

    function rgb2hex(rgb) { rgb = rgb.match(/^rgb\((\d+),(\d+),(\d+)\)$/); function hex(x) { return (&qu ...

  10. 使用dynamic来简化反射实现

    dynamic是Framework4.0的新特性,dynamic的出现让C#具有了弱语言类型的特性,编译器在编译的时候,不再对类型进行检查,不会报错,但是运行时如果执行的是不存在的属性或者方法,运行程 ...