1.窗体与界面设计-菜单应用实例

菜单是程序开发中经常使用的界面元素,合理利用菜单不但可以使用户非常方便地使用程序的功能,而且还能提高工作效率。

001 带历史信息的菜单

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

注意:要建立一个带历史信息的菜单,必须首先添加一个 MenuStrip 菜单控件,创建一个“文件”主菜单,在其下面创建打开、关闭所有、退出等菜单选项。同时向窗体添加 OpenFileDialog 控件,并将主窗体的 IsMdiContainer 属性设为 True。

namespace _001_MenuHistory
{
    public partial class Form1 : Form
    {
        string address;
        public Form1()
        {
            InitializeComponent();
            address = System.Environment.CurrentDirectory;
        }
        //将打开文件路径写入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();                              //关闭当前的StreamWriter对象和基础流
            ShowWindows(openFileDialog1.FileName);  //调用自定义方法ShowWindows
        }
        //读取INI文件并将信息加入菜单
        private void Form1_Load(object sender, EventArgs e)
        {
            StreamReader sr = new StreamReader(address + "\\Menu.ini");             //声明一个以一种特定编码从字节流中读取字符的对象
            int i = this.文件ToolStripMenuItem.DropDownItems.Count - 2;             //定义一个ini型变量i并为其赋值
            while (sr.Peek() >= 0)                                                  //读取INI文件
            {
                ToolStripMenuItem menuitem = new ToolStripMenuItem(sr.ReadLine());  //声明一个ToolStripMenuItem对象
                this.文件ToolStripMenuItem.DropDownItems.Insert(i, menuitem);       //向菜单中添加内容
                i++;                                                                 //int型变量i递增
                menuitem.Click += new EventHandler(menuitem_Click);                  //为菜单中的可选项生成处理程序
            }
            sr.Close();                                                              //关闭当前的StreamReader对象和基础流
        }

        private void menuitem_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem menu = (ToolStripMenuItem)sender;
            ShowWindows(menu.Text);
        }
        //自定义方法ShowWindows用来加载背景图片并显示窗体
        public void ShowWindows(string fileName)  
        {
            Image p = Image.FromFile(fileName);     //定义一个Image型的变量p
            Form f = new Form();                    //定义一个Form型的变量f
            f.MdiParent = this;                     //设定当前窗体为MDI父窗体
            f.BackgroundImage = p;                  //为窗体f设置背景图片
            f.Show();                               //显示窗体
        }

        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }

002 菜单动态合并

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

创建一个项目,默认窗体为 Form1,向 Form1 窗体中添加一个 MenuStrip 控件用来设计菜单,同时向窗体中添加一个 ContextMenuStrip 控件用来设计右键菜单。再添加一个窗体 Form2,同时向窗体中添加 ContextMenuStrip 控件用来设计右键菜单,Modifiers 属性设置为 Public。

namespace UniteMenu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();                      //定义一个Form型的对象f
            f.MdiParent = this;                         //设置f的MDI父窗体
            f.Show();                                   //显示子窗体
            f.Resize += new EventHandler(f_Resize);     //为窗体f生成调整大小的处理程序
        }

        void f_Resize(object sender, EventArgs e)
        {
            Form2 f = (Form2)sender;                                    //将sender类型的变量转换为Form型并赋值给f
            ToolStripMenuItem item = new ToolStripMenuItem();           //声明一个ToolStripMenuItem型的对象item
            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 像开始菜单一样漂亮的菜单

在 C#4.0 中,MenuStrip 控件中的子项 ToolStripMenuItem 已经包括了左侧的彩条,实现像开始菜单一样的菜单非常容易,如果想改变左侧竖着的彩条,只要给对应的菜单项设置相应的图片即可。

右键添加要设置图片的菜单项(如:Sava As),选择“Set Image...”,然后 Import 一张本地的图片。


004 任务栏托盘菜单

要实现程序启动时出现在系统托盘中,必须要为窗体添加 NotifyIcon 控件和 ContextMenuStrip 控件,必须为 NotifyIcon 控件的 Icon属性设置图标。

1.创建一个项目,将其命名为 NotifyIconSl,默认窗体为 Form1。

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

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


005 可以拉伸的菜单界面

要实现可以拉伸的菜单,关键是要使用一个开关变量,同时调用 ShowDropDown 方法,显示操作后的结果。 

创建一个项目,默认窗体为 Form1,向 Form1 窗体中添加一个 MenuStrip 控件,选中 MenuStrip 控件为其添加子项,双击“展开(关闭)其他项”为其单击事件添加处理代码。

namespace _005_HideMenu
{
    public partial class Form1 : Form
    {
        int i = 2;
        public Form1()
        {
            InitializeComponent();
        }

        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 展开关闭其他项ToolStripMenuItem_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;
                    //显示与ToolStripDropDownItem有关的ToolStripDropDownItem控件
                    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;
                    //显示与ToolStripDropDownItem有关的ToolStripDropDownItem控件
                    this.操作ToolStripMenuItem.ShowDropDown();
                    break;
            }
        }
    }
}

006 级联菜单

制作级联菜单需要使用 MenuStrip 控件。

注意:在使用级联菜单时最好不要超过5层,否则用户在使用时会感觉很不方便。

创建一个项目,默认窗体为 Form1。在 Form1 窗体添加 MenuStrip 控件,选中 MenuStrip 控件为其添加子项和级联子项。

转载于:https://www.cnblogs.com/iwanc/archive/2013/06/12/3130987.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值