第
1
章 窗体与界面设计
1.1 菜单应用实例
菜单应用实例菜单应用实例
菜单应用实例
菜单是程序开发中经常使用的界面元素,合理利用菜单不但可以使用
户非常方便的操作程序的功能,更能使效率提高,适应人性化的潮流。
下面通过几个应用实例,介绍菜单设计的方法和技术。
实例
001
带历史信息的菜单
实例说明
实例说明实例说明
实例说明
在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以
方便下次使用。如图 1.1 所示,单击“文件”菜单下的“打开文件”子菜单,打
开需要查阅的图纸。下次运行该软件时,上次打开的文件名记录到“文件”菜单
的历史菜单中,选择该菜单,即可打开相应的图纸文件。
技术要点
技术要点技术要点
技术要点
要实现保存最近打开的文件,可以将在菜单中最近打开文件的文件名和路径
保存到事先建立的*.ini 文件中,系统启动时读取*.ini 中的数据建立数组菜单,
即可实现显示历史菜单的功能。
注意:要建立一个带历史信息的菜单,必须首先添加一个
MenuStrip
菜单控件,并将
主窗体的
IsMdiContainer
属性设为
True
。
实现过程
实现过程实现过程
实现过程
(1)创建一个项目,将其命名为 Ex01_01,默认窗体为 Form1。
(2)从工具箱中向 Form1 窗体添加 MenuStrip 控件,同时向窗体添加 Open
FileDialog 控件。创建一个“文件”主菜单,在其下面创建打开、关闭所有、
退出等菜单选项。
(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,同时向窗体添加 ContextMenu
Strip 控件用来设计右键菜单,然后选中 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.ToolStripI
tem[] {
item});
}
举一反三
举一反三举一反三
举一反三
根据本实例,读者可以实现以下功能。
让右键菜单在子窗体中显示。
让右键菜单在主窗体和子窗体中同时显示。
实例
003
像开始菜单一样漂亮的菜单
实例说明
实例说明实例说明
实例说明
Windows 的开始菜单非常的独特,在菜单的旁边有一条竖着的彩条,彩条中
还写着文字。这种独特的菜单能够使程序的界面看起来更加的漂亮。本例中就实
现了这种菜单,运行本例弹出“打开菜单”时,就会看到菜单的左边有一个紫色
的彩条。实例效果如图 1.3 所示。
技术要点
技术要点技术要点
技术要点
在 C# 2.0 中,MenuStrip 控件中的子项 ToolStripMenuItem 已经包括了左侧
的彩条,实现像开始菜单一样的菜单非常容易,不像在其他计算机语言的开发环