C#菜单分为主菜单和快捷菜单两种
菜单、⼯具栏、状态栏的设计
(⼀)菜单设计:
1、菜单是组织应⽤程序功能的⼀种⽅法,应⽤程序界⾯通常通过菜单来使⽤
程序的功能。
2、菜单分类:C#菜单分为主菜单和快捷菜单两种。
◆主菜单:标题栏下⾯显⽰的菜单。
◆快捷菜单:右击⿏标显⽰的菜单。
3、菜单类:
创建菜单使⽤的菜单类有:
◆主菜单类(MenuStrip类):创建主菜单
◆快捷菜单类(ContextMenuStrip类):创建快捷菜单
这些类都属于System.Windows.Forms命名空间
4、创建菜单的⽅法:
◆⼯具箱中的菜单控件直接编辑⽽成;(常⽤的⽅式)
◆由程序代码⽣成。(⼀般了解)
⼆、主菜单创建:
使⽤MenuStrip类
1、菜单控件使⽤⽅法:
(1)在窗体设计器界⾯从⼯具箱中拖⾄窗体⼀个MenuStrip控件,⾃动产⽣⼀个对象menuStrip1.
(2)选中menuStrip1,在窗体界⾯上出现的“请在此输⼊”的位置输⼊菜单项名(设Text属性),每输⼊⼀个,⾃动产⽣⼀个菜单项对象的。在属性窗⼝中可设置其名称(Name)属性。
(3)双击某个菜单项,⾃动转⼊代码编辑器窗⼝,⼿⼯编写该菜单项的Click 事件处理程序。
menustrip和toolstrip
2、菜单项控件的常⽤属性及事件:
(1)Name:该菜单项对象的名字,可将默认的名字改名。
(2)Text:string型,该菜单项对象的标题⽂本,如“⽂件”、“编辑”
◆两个特殊值:
Text的值如果是“-”则菜单项为分隔符。
Text的值中如果出现“&”符号,则紧跟在后⾯的字母为访问键。(3)Enabled:bool型,设置菜单项是否可⽤。值为false,则该菜单项显⽰为灰⾊,表⽰不可⽤。(举例:如⽂本框中没选中⽂字,复制不能⽤)
(4)Checked:bool型,设置菜单项的⽂本前是否出现选中标记“√”
(5)ShortcutKeys:设置菜单项的快捷键。如:Ctrl+N(区分访问键和快捷键)
(6)Click事件:单击该菜单项对象时发⽣。每个菜单项都是⼀个控件,都响
应⼀个事件过程。每次单击菜单项时,就会调⽤⼀个菜单项的单击事件过程。
例如:private void mnuExit_Click(object sender, EventArgs e)//"退出"菜单项
{
Application.Exit();
}
三、快捷菜单创建:
1、使⽤ContextMenuStrip类
(1)在窗体放置⼀个ContextMenuStrip控件,默认名称contextMenuStrip1 (2)选中contextMenuStrip1对象,通过菜单编辑器建⽴各菜单项(⽅法同主菜单中菜单项创建)
(3)编写每个菜单项的Click事件处理程序(快捷菜单中的菜单项⼀般都与主菜单项对应,在其Click事件处理程序中⼀般直接调⽤主菜单项的Click事件处理程序即可,不⽤重复输⼊代码)
(4)设置被弹出对象的ContextMenuStrip属性为contextMenuStrip1
实例:设计简单记事本程序,设计记事本程序的菜单和快捷菜单。
如图所⽰。主菜单项有:⽂件,编辑和格式三项。⼦菜单项分别包含如下图所⽰的菜单项。
编写部分菜单项及⼯具栏和状态栏的相应事件⽅法:
private void mnuFile_DropDownOpening(object sender, EventArgs e)//打开“⽂件”菜单项时
{
if (txtEdit.Text != "")
{
mnuFileNew.Enabled = true;//“新建”菜单项可⽤
mnuFileSave.Enabled = true;//“保存”菜单项可⽤
}
else
{
mnuFileNew.Enabled = false ;//“新建”菜单项不可⽤
mnuFileSave.Enabled = false ;//“保存”菜单项不可⽤
}
}
private void mnuUndo_Click(object sender, EventArgs e)//“撤消”菜单项
{
if (txtEdit.CanUndo == true)
{
txtEdit.Undo();//撤消上⼀次操作
txtEdit.ClearUndo();//清除缓冲区中有关撤消的信息
}
}
private void mnuCut_Click(object sender, EventArgs e)//“剪切”菜单项
{
if (txtEdit.SelectedText != "")
{
txtEdit.Cut();
}
}
private void mnuEdit_DropDownOpening(object sender, EventArgs e)//弹出"编辑"菜单时决定菜单项是否可⽤{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text)) mnuPaste.Enabled = true;
else
mnuPaste.Enabled = false;
if (txtEdit.SelectionLength > 0)
{
mnuCut.Enabled = true;
mnuCopy.Enabled = true;
mnuDel.Enabled = true;
}
else
{
mnuCut.Enabled = true;
mnuCopy.Enabled = true;
mnuDel.Enabled = true;
}
if (txtEdit.CanUndo == true)
mnuUndo.Enabled = true;
else
mnuUndo.Enabled = false;
}
}
private void mnuExit_Click(object sender, EventArgs e)//"退出"菜单项 {
Application.Exit();
}
private void mnuCopy_Click(object sender, EventArgs e)//"复制"菜单项 {
if (txtEdit.SelectedText != "")
{
txtEdit.Copy();
}
}
private void mnuPaste_Click(object sender, EventArgs e)//"粘贴"菜单项
{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) == true)//剪切板中是否有⽂本{
txtEdit.Paste();
}
}
private void mnuDel_Click(object sender, EventArgs e)//"删除"菜单项
{
if (txtEdit.SelectedText != "")
{
txtEdit.SelectedText="";
}
}
private void mnuSelectAll_Click(object sender, EventArgs e)//"全选"菜单项 {
txtEdit.SelectAll();