c# 公众号 菜单
2015-12-15 11:12:51 yongh701 阅读数 2735

菜单栏是窗体程序中,一个很重要的组件,下面就利用一个小程序,说明C#窗体程序中如何使用菜单。

如下图,实现一个很简单的,在各类文本编辑器中都很常见的替换功能。


注意到,无论是菜单栏的工具 或者是 替换功能,都是配有快捷键的。

选择 替换功能弹出一个新的模态对话框,让用户输入东西。

具体制作过程如下:

1、首先贴上本解决方案的文件组织树,其中Intent.cs是用来在窗体与窗体之间传递数值的,具体在《【C#】窗体间互相传值》(点击打开链接)讲过,这里不再赘述了。


2、之后是Form1.cs的布局,本文的主角菜单就在这里出场了,与其它控件一样简单,直接从工具栏拖出MenuStrip就可以了,同时拖出textbox1这个控件,将textbox1的Multiline改成True,anchor改成Top,right,left,bottom以适应最大化。


在为Form1菜单添加每一项的时候注意:先输入英文,之后我们再自己手动改其Text,因为你输入的东西,会自动成name与text的一部分,name是不可以用中文的。对于类此“工具(T)”含有子项的东西,与当年VC6《【mfc】利用到MFC菜单、字体对话框、OnSize函数实现简易记事本》(点击打开链接)的菜单一样,在Text中写成“工具(&T)”就能够实现Alt+T这个快捷键了。


至于类似“替换”这样的子项,需要我们自行设置其ShortcutKeys,之后双击这个“替换”为其设置点击事件。


3、双击这个“替换”为其设置点击事件之后,不用急着写代码,我们先新建一个Form2窗体,与Intent.cs,Intent.cs就是用来传值的,代码如下,在之前的文章说过,不再赘述。

using System;
using System.Collections.Generic;
using System.Text;

namespace menu
{
    class Intent
    {
        public static Dictionary<string, Object> dict = new Dictionary<string, Object>();
    }
}

Form2的布局如下:


4、之后Form1的代码如下,替换文本很简单,点击“替换”按钮,Form2作为一个模态对话框蹦出来,得到Form2传递过来的两个值,直接取走textbox1的text用replace方法一整,再放上去就完成。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace menu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;//设置form1的开始位置为屏幕的中央  
        }

        private void replaceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();//声明要使用form2窗体
            form2.Text = this.Text;
            if (form2.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = textBox1.Text.Replace(Intent.dict["form2_textbox1_text"] + "", Intent.dict["form2_textbox2_text"] + "");
            }
        }
    }
}

5、Form2的代码则如下,设置好不同按钮的返回值给Form1就可以了。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace menu
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterParent;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Intent.dict["form2_textbox1_text"] = textBox1.Text;
            Intent.dict["form2_textbox2_text"] = textBox2.Text;
            this.DialogResult = DialogResult.OK;//同时设置返回值为OK,不设置的话,默认返回Cancel  
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}


C# 菜单
2012-08-16 15:03:23 bcb_521 阅读数 979

菜单

一、  菜单(Menu类)。

菜单是大多数传统Microsoft Windows应用程序的重点。菜单位于窗体标题栏的下方,它实际上列出了程序所能完成的每一项功能——剪切和粘贴照样的简单操作。即使一个应用程序支持大量功能键快捷方式,这些快捷方式一般也是重复了菜单项。

               类层次图

                  Object

                    ↓

              MarshalByRefObject

                    ↓

                Component

                    ↓

                   Menu(抽象类)    

          ↓        ↓               ↓

      MainMenu类  ContextMenu类  MenuItem   

     (主菜单)   (快捷菜单)    (菜单项)

要想像一个窗体附加特定的菜单,需要将MainMenu对象赋给窗体Menu属性。

 

例:      this.Menu = new MainMenu();

 

1、     主菜单(MainMenu)

一个菜单一定要用于自己的主框架,而MainMenu就等于是菜单中的主框架。

我们在使用菜单时必须有这么一个框架才可以使用。

 

类型

属性

访问方式

说明

Menu

MenuItems

读/写

获取或设置菜单项的集合。

 

MenuItems下有一个叫做Add的方法是专门用来往指定的主菜单上加载菜单项使用的,这个方法除了接收字符串类型的参数用来设置菜单项的名称以外,还接收一个菜单项的对象。一个菜单是由一个主菜单和N个菜单项组成的。

 

2、   菜单项(MenuItem类)

菜单项是与主菜单分离的,每个菜单项都由自己的独立体。

2.1、菜单项的构造函数。

2.1.1、MenuItem();

2.1.2、MenuItem(string strText);         

//设置菜单项名称。

2.1.3、MenuItem(string strText,EventArgs e); 

//设置菜单项名称与点击事件。

2.1.4、MenuItem(string strText,EventArgs e,shortcut sc);

//设置菜单项的快捷键

2.1.5、MenuItem(string strText,MenuItem[] mi);

//添加一组菜单项

 

2.2、菜单项属性。

类型

属性

访问方式

说明

Shortcut

Shortcut

读/写

获取或设置菜单项快键。

Bool

Showshortcut

读/写

获取或设置菜单项快键是否在窗体内显示。

Bool

Visible

读/写

获取或设置菜单项是否可见。

Bool

Enabled

读/写

获取或设置是否启用菜单项。

Bool

DefaultItem

读/写

获取或设置本菜单项是否为默认菜单项。

Bool

Checked

读/写

获取或设置菜单项具有复选行为(注:不允许为顶级菜单项设置此属性)。

 

2.2、菜单项事件。

事件

方法

委托

参数

Click

OnClick

EventHandler

EventArgs

Popup

OnPopup

EventHandler

EventArgs

Select

OnSelect

EventHandler

EventArgs

Popup事件是在显示菜单项的菜单项列表时触发的事件,Select事件是当鼠标经过菜单项时触发的事件。

 

例:

using System;

using System.Drawing;

using System.Windows.Forms;

 

namespace Hty

{

    class MyForm : Form

    {

        private MainMenu men;

        private MenuItem item;

        static void Main()

        {

            Application.Run(new MyForm());

        }

        public MyForm()

        {

            this.Text = "菜单";

            

            ///菜单

            men = new MainMenu();

            men.Name = "a";

            men.MenuItems.Add("ss");

 

            ///菜单项

            item = new MenuItem();

            item.Text = "姓名";

            men.MenuItems.Add(item);

            item.MenuItems.Add("ss");

            item.MenuItems[0].Checked = true;

            item.MenuItems[0].Click += new EventHandler(MyForm_Click);

           

            this.Menu = men;

        }

 

        void MyForm_Click(object sender, EventArgs e)

        {

            MessageBox.Show(((MenuItem)sender).Text);

        }

    }

}

3、   快捷菜单(ContextMenu类)

快捷菜单是当我们使用WORD稳当或者VS.NET编译器时右键点击窗体时出现的菜单,快捷菜单从某些方面比主菜单要简单,主要因为主菜单可以加入N列菜单,而快捷菜单值能加入一列菜单。

要想使用快捷菜单也必须将快捷菜单的对象赋给控件中的ContextMenu属性才可以。

this.ContextMenu = new ContextMenu();

如果想要往快捷菜单上加入相应的项,也必须要通过菜单项来加入,快捷菜单中也有MenuItems属性。

 

例:

using System;

using System.Drawing;

using System.Windows.Forms;

namespace Hty

{

    class MyForm : Form

    {

        private MainMenu men;

        private MenuItem item;

        private ContextMenu txtmen;

        static void Main()

        {

            Application.Run(new MyForm());

        }

        public MyForm()

        {

            this.Text = "菜单";

           

            ///菜单

            men = new MainMenu();

            men.Name = "a";

            men.MenuItems.Add("ss");

 

            ///菜单项

            item = new MenuItem();

            item.Text = "姓名";

            men.MenuItems.Add(item);

            item.MenuItems.Add("ss");

            item.MenuItems[0].Checked = true;

            item.MenuItems[0].Click += new EventHandler(MyForm_Click);

           

            ///快捷菜单

            txtmen = new ContextMenu();

            txtmen.MenuItems.Add(item);

 

            this.Menu = men;

            this.ContextMenu = txtmen;

        }

        void MyForm_Click(object sender, EventArgs e)

        {

            MessageBox.Show(((MenuItem)sender).Text);

        }

    }

}

2009-10-07 09:14:00 weiqian000 阅读数 1088

C#动态创建菜单

一、加入所需数据
1、创建数据表:

create table t_SysMenu(
FMenuName varchar(50)    not null , 
FMenuText varchar(50)    not null , 
FMenuEvent varchar(100) ,
FMenuShortcutKeys varchar(50) null,
FMenuIcon int default 0,
FMenuSequence int default 0,
FParentNo varchar(21) not null , 
FStatus    char(1) default '1',---
FFlag     char(1) default '1',---
FCreateDate             datetime default getdate()   ,
FCreator           varchar(20) null ,
FModifyDate             datetime default getdate()   ,
FModifier           varchar(20) null ,
FMemo               text null ,
        constraint PK_t_SysMenu primary key(FMenuName) 
)
go


2、插入数据:

MenuItemBase 基础资料(&B) NULL NULL 0
MenuItemBase_01 系统代码 MenuItemBase_01_Click NULL MenuItemBase
MenuItemHelp 帮助(&H) NULL NULL 0
MenuItemHelp_About 关于(&A) MenuItemHelp_About_Click NULL MenuItemHelp
MenuItemHelp_Cat 目录(&C) NULL F1 MenuItemHelp



二、新建项目-> Windows 用应用程序
1、界面如图aa:
拖入一菜单项MenuStrip并命名为sysMenu


2、代码段:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DBClassLib;
namespace SystemMenu
{
    public partial class Form1 : Form
    {
        private string strConnect = "user id=sa;password=; initial catalog=ERP;Server=huite-pc; Connect Timeout=30";
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                sysMenu.Items.Clear();
                SetMenu(sysMenu, "0");
            }
            catch
            {
                MessageBox.Show("创建菜单时出错", "出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="mMain">主菜单项</param>
        /// <param name="mName">主菜单项名称</param>
        private void SetMenu(MenuStrip mMain,string mName)
        {
            try
            {
                string strSql;
                int i;
                strSql = "SELECT * FROM t_SysMenu WHERE FStatus='1' And FParentNo='" + mName + "' Order by FMenuSequence";
                DBOperator db = DBOperator.GetDBOperator(strConnect);
                DataTable dt = new DataTable();
                db.Open();
                dt = db.GetDataTable(strSql);
                if (dt.Rows.Count > 0)
                {
                    for (i = 0; i < dt.Rows.Count; i++)
                    {
                        if (dt.Rows[i]["FParentNo"].ToString() == "0")
                        {
                            ToolStripMenuItem mItem;
                            mItem = new ToolStripMenuItem(dt.Rows[i]["FMenuText"].ToString());
                            mItem.Name = dt.Rows[i]["FMenuName"].ToString();
//                            mItem.Text = dt.Rows[i]["FMenuText"].ToString();
                            mMain.Items.Add(mItem);
                            SetSubMenu((ToolStripMenuItem)mMain.Items[dt.Rows[i]["FMenuName"].ToString()], dt.Rows[i]["FMenuName"].ToString());
                        }
                    }
                }
                db.Close();
            }
            catch
            {
                MessageBox.Show("创建主菜单时出错", "出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// 创建子菜单
        /// </summary>
        /// <param name="mItem">要创建的子菜单的父项</param>
        /// <param name="mName">要创建的子菜单的父项名称</param>
        /// 
        private void SetSubMenu( ToolStripMenuItem mItem,string mName)
        {
            try
            {
                string strSql;
                int i;
                //查询数据库
                strSql = "SELECT * FROM t_SysMenu WHERE FStatus='1' And FParentNo='" + mName + "' Order by FMenuSequence";
                DBOperator db = DBOperator.GetDBOperator(strConnect);
                DataTable dt = new DataTable();
                db.Open();
                dt = db.GetDataTable(strSql);
                for (i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i]["FParentNo"].ToString() == mName)
                    {
                        ToolStripMenuItem mSubItem;
                        EventHandler eh=GetEvent(dt.Rows[i]["FMenuEvent"]); //获得操作事件
                        Keys key = GetShurtcutKeys(dt.Rows[i]["FMenuShortcutKeys"]);//获得快捷键
                        
                        //创建菜单项
                        mSubItem = new ToolStripMenuItem(dt.Rows[i]["FMenuText"].ToString(), imageList1.Images[(int)dt.Rows[i]["FMenuIcon"]],eh,key);
                        mSubItem.Name = dt.Rows[i]["FMenuName"].ToString();
                        //mSubItem.Text = dt.Rows[i]["FMenuText"].ToString();
                        mItem.DropDownItems.Add(mSubItem);
                        //设置子菜单
                        SetSubMenu((ToolStripMenuItem)mItem.DropDownItems[dt.Rows[i]["FMenuName"].ToString()], dt.Rows[i]["FMenuName"].ToString());
                    }
                }
                db.Close();
            }
            catch
            {
                MessageBox.Show("创建子菜单时出错", "出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        /// <summary>
        /// 取菜单事件
        /// </summary>
        /// <param name="mEvent">传入菜单事件对象</param>
        /// <returns>EventHandler事件句柄</returns>
        protected EventHandler GetEvent(object mEvent)
        {
            EventHandler eh;
            switch (mEvent.ToString())
            {
                case "MenuItemFile_Exit_Click"://退出程序
                    eh = new EventHandler(MenuItemFile_Exit_Click);
                    break;
                case "MenuItemFile_Print_Click"://窗口打印
                    eh = new EventHandler(MenuItemFile_Print_Click);
                    break;
                case "MenuItemWindow_Vertical_Click"://垂直排列窗口
                    eh = new EventHandler(MenuItemWindow_Vertical_Click);
                    break;
                case "MenuItemWindow_CloseAll_Click"://关闭所有子窗口
                    eh = new EventHandler(MenuItemWindow_CloseAll_Click);
                    break;
                case "MenuItemWindow_Cascade_Click"://重叠排列窗口
                    eh = new EventHandler(MenuItemWindow_Cascade_Click);
                    break;
                case "MenuItemWindow_Horizontal_Click"://窗口水平排列
                    eh = new EventHandler(MenuItemWindow_Horizontal_Click);
                    break;
                case "MenuItemHelp_About_Click"://关于窗口
                    eh = new EventHandler(MenuItemHelp_About_Click);
                    break;
                case "MenuItemBase_01_Click"://系统基本代码维护
                    eh = new EventHandler(MenuItemBase_01_Click);
                    break;
                default:
                    eh = new EventHandler(MenuItemNull_Click); 
                    break;
            }
            return eh;
        }
        /// <summary>
        /// 获取操作快捷键
        /// </summary>
        /// <param name="mShurtcut"></param>
        /// <returns></returns>
        protected Keys GetShurtcutKeys(object mShurtcut)
        {
            Keys key;
            switch (mShurtcut.ToString())
            {
                case "CtrlA":
                    key = (Keys)Shortcut.CtrlA;
                    break;
                case "F1":
                    key = (Keys)Shortcut.F1;
                    break;
                default:
                    key = (Keys)Shortcut.None;
                    break;
            }
            return key;
        
        }

        /// <summary>
        /// 空事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void MenuItemNull_Click(object sender, EventArgs e)
        { 
        
        }
        /// <summary>
        /// 退出程序
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItemFile_Exit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        /// <summary>
        /// 窗口打印
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItemFile_Print_Click(object sender, EventArgs e)
        {
            MessageBox.Show("菜单事件", "响应", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        /// <summary>
        /// 垂直排列窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItemWindow_Vertical_Click(object sender, EventArgs e)
        {
            LayoutMdi(MdiLayout.TileVertical);
        }
        /// <summary>
        /// 关闭所有子窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItemWindow_CloseAll_Click(object sender, EventArgs e)
        {
            foreach (Form childForm in MdiChildren)
            {
                childForm.Close();
            }
        }
        /// <summary>
        /// 重叠排列窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItemWindow_Cascade_Click(object sender, EventArgs e)
        {
            LayoutMdi(MdiLayout.Cascade);
        }
        /// <summary>
        /// 窗口水平排列
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItemWindow_Horizontal_Click(object sender, EventArgs e)
        {
            LayoutMdi(MdiLayout.TileHorizontal);
        }
        /// <summary>
        /// 关于窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItemHelp_About_Click(object sender, EventArgs e)
        {
        }

        /// <summary>
        /// 系统基本代码维护
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItemBase_01_Click(object sender, EventArgs e)
        {
            //不重复打开窗口
            if (CheckChildForm("FormBaseCode") == false)
            {
                //打开窗口
            }
            else
            {
                //激活窗口
            }
        }
        /// <summary>
        /// 检测子窗口是否已打开
        /// </summary>
        /// <param name="childForm">子窗口名称</param>
        /// <returns>bool</returns>
        private bool CheckChildForm(string strChildForm)
        {
            bool isOpen = false;
            foreach (Form childForm in MdiChildren)
            {
                if (childForm.Name == strChildForm)
                {
                    isOpen = true;
                    break;
                }
            }
            return isOpen;
        }

    }

2012-06-10 22:07:10 itctgu 阅读数 227

1. MenuStrip为菜单栏

快捷键设置:

资料管理[&I]  在字母前面加一个&号


2. StatusStrip为状态栏

2006-06-07 13:59:00 alan_whg 阅读数 2448
C#动态菜单

 

public class Form1 : System.Windows.Forms.Form
{
private ContextMenu myContextMenu;
private MenuItem menuFile,menuOpen,menuClose,menuChecked,menuGray,menuBar;
private void InitializeComponent()
{
//初始化ContextMenu
myContextMenu=new ContextMenu();
menuFile=new MenuItem("文件");
menuOpen=new MenuItem("打开...",new EventHandler(menuOpen_Click),Shortcut.CtrlO );
menuClose=new MenuItem("关闭",new EventHandler(menuClose_Click),Shortcut.CtrlX);
menuChecked=new MenuItem("选中的菜单");
menuChecked.Checked=true;
menuGray=new MenuItem("禁用的菜单");
menuGray.Enabled=false;
menuBar=new MenuItem("-");
//向ContextMenu里加入菜单
myContextMenu.MenuItems.Add(menuFile);
myContextMenu.MenuItems.Add(menuChecked);
myContextMenu.MenuItems.Add(menuOpen);
myContextMenu.MenuItems.Add(menuBar);
myContextMenu.MenuItems.Add(menuClose);
myContextMenu.MenuItems.Add(menuGray);
//设定本窗体的ContextMenu
//设置窗体关联的快捷菜单
this.ContextMenu=myContextMenu;
//设置窗体工作区域大小
this.ClientSize=new System.Drawing.Size(400,200);
this.StartPosition=FormStartPosition.CenterScreen;

private void menuOpen_Click(object sender,System.EventArgs e)
{
OpenFileDialog OpenFile=new OpenFileDialog();
OpenFile.ShowDialog();
}
private void menuClose_Click(object sender,System.EventArgs e)
{
Application.Exit();
}

C#动态创建菜单

阅读数 1952

C#动态创建菜单一、加入所需数据1、创建数据表:createtablet_SysMenu(FMenuNamevarchar(50)   notnull, FMenuTextvarchar(50)   notnull, FMenuEventvarchar(100),FMenuShortcutKeysvarchar(50)null,F

博文 来自: chenli985

C#自动完成菜单

阅读数 684

自动完成菜单[乌克兰]PavelTorgashov著,野比译自定义用于RichTextBox、TextBox和其他控件的自动完成菜单。 codeproject.com「2012四月最佳C#文章」获奖作品击阅读原文 下载源代码-192.4KB 下载DEMO-22.9KB   简介

博文 来自: dong413876225

C#菜单和工具栏

阅读数 242

1、contextmenustrip:上下文菜单(鼠标右键菜单)2、menustrip:普通(窗体)菜单3、statusStrip状态栏4、toolStrip工具栏,可导入ico图标5、ToolStripContainer工具栏容器,软件运行起来后,允许我们将工具栏拖放到我们需要的地方。如果系统比较大了,工具栏多可以用。...

博文 来自: qq_20936333

C#微信支付(二)—— 公众号支付

阅读数 480

先做最简单的公众号支付,也就是微信内支付。相关链接:公众号支付CreatedwithRaphaël2.1.2发起支付已有OpenId?统一下单拉起WeixinJSBridge对象支付成功?支付回调结束获取OpenIdyesnoyesno大概就这样把,还算是比较简单的,前端发起支付有WeixinJSBridge的getBrandWCPayRequest和wx.choosew...

博文 来自: qwt7896541230

微信开放平台 公众号第三方平台开发C#

阅读数 744

微信开放平台公众号第三方平台开发教程https://blog.csdn.net/zhangdaiscott/article/details/47019753 公众号第三方平台系列http://www.cnblogs.com/iCoffee/p/4813558.html...

博文 来自: qb170217
没有更多推荐了,返回首页