实例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. IOS_OC_百度地图与社交分享

    前奏. 知识点介绍 一. 导航和画线 地图画线 (理解) 二. 百度地图 集成百度地图 (掌握) POI检索 (掌握) 三. 社交分享 系统自带分享 (了解) 友盟分享 (掌握) SSO授权 (理解) ...

  2. 升级Capitan 10.11以后CocoaPod 无效解决办法

    今天发现升级10.11的系统以后执行 pod install 的时候报错 zsh: command not found: pod 解决方法如下: 1.检查gem 的数据源 gem sources -l ...

  3. JS Attribute属性操作

    Attribute是属性的意思,文章仅对部分兼容IE和FF的Attribute相关的介绍. attributes:获取一个属性作为对象 getAttribute:获取某一个属性的值setAttribu ...

  4. checkbox 选择一个checkbox,其他checkbox也会选择

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  5. 10_Mybatis开发Dao方法——mapper代理实现

    [工程截图(几个关键的标红框)] [UserMapper.xml] <?xml version="1.0" encoding="UTF-8"?> & ...

  6. UVA 11384 Help is needed for Dexter(问题转化 递归)

    Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided to keep Dee ...

  7. JVM - 内存溢出问题排查相关命令jcmd jmap

    jcmd http://docs.oracle.com/javase/8/docs/technotes/tools/windows/jcmd.html jcmd-l  列出正在执行的JAVA进程ID ...

  8. PHPUML 生成UML

    Selecting the UML/XMI version To select which version of the UML/XMI standards you want your XMI to ...

  9. ubuntu sudo

    sudo(substitute user 或者 superuser do),是一种程序, 以允许用户通过安全的方式使用特殊的权限运行程序(通常为系统的超级 用户) 语法 sudo [-bhHpV][- ...

  10. MVC中Razor视图基本语法(1)

    Razor前面,必须要跟前面的有空隙,即空格(多谢一楼提醒,url里面确实不用空格,如果要在url里面只需要@(ViewBag.),加上括号就好了),之后的必须要连贯,否则加小括号 1,在页面中输出单 ...