版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的
MenuStrip控件提供了程序窗体的主菜单,即显示于窗体顶端部分的菜单。
MenuStrip常用属性:
- ImageScalingSize:菜单上所用图像的大小(单位:像素),默认为(16,16)。注意:如果修改了此值,在窗体编辑模式下还是显示为(16,16),不会立即显示为设置的大小,可以关闭窗体再打开。
【例 8.45】【项目:code8-045】在窗体上建立菜单。
双击添加MenuStrip控件,它会显示在编辑器底部,窗体上部显示菜单区域,并且显示灰色的“请在此处键入”:
图8-62 菜单显示的位置
在“请在此处键入”后部有一个向下的小箭头,单击小箭头可以设置每个菜单项类型:
MenuItem:常规的菜单项。
- ComboBox: 对应ToolStripComboBox类型,组合框,类似于普通的ComboBox。
- TextBox:对应ToolStripTextBox类型,文本框,类似于普通的TextBox。
- Separator:分隔符,在菜单中显示为一横线。
请根据实际需要选择相应的菜单项类型。
在“请在此处键入”位置单击进入文本编辑模式,输入“文件(&F)”,其中“&+字母”用来建立该菜单的快捷键,例如“&F”即快捷键为“ALT+F”,此时可以继续单击右边或者下方“请在此处键入”继续添加菜单或子菜单:
图8-63 在已建菜单项右边或者下方继续添加菜单项
继续建立“文件F”的子菜单:“打开(&O)”、“保存(&S)”、“-”、“关闭(&X)”,以及主菜单项“编辑(&E)”、“视图(&V)”。
在子菜单中可以使用“-”(减号)在菜单中增加一个分隔栏。但是横向的主菜单中不允许使用分隔栏。
如果某个菜单项建立错误,可以直接单击后进行编辑,也可以选中错误的菜单项,按下键盘“DEL”按键删除。
当输入菜单(包括子菜单)项名称后,C#会自动建立一个ToolStripMenuItem类,默认使用“菜单文本”+“ToolStripMenuItem”来命名。例如菜单项“文件F”对应名称“文件FToolStripMenuItem”,单击“文件F”,C#编辑器右侧【属性】窗口将显示“文件FToolStripMenuItem”的属性。
ToolStripMenuItem类的常用属性:
- Image:显示在菜单文本前面的图标。
- CheckOnClick:是否该菜单项被单击时在名称前面显示选中或未选中。如果设置了Image属性时,此属性即使为True也不会显示。
- Checked:设置是否被选中。
- Visible:是否可见。
选中菜单项“打开O”(打开OToolStripMenuItem),将【属性】窗口中Image属性添加一张图片。注意:默认没有*.Ico,但是实际上是可以使用图标文件的。
选中菜单项“保存S”(保存SToolStripMenuItem),将【属性】窗口中的CheckOnClick属性设置为True,运行时,此菜单项被单击时将会自动显示为选中或未选中。
图8-64 带图标和选择框的菜单项
当需要给某个菜单项添加事件时,直接双击该菜单项,进入此菜单项的事件代码编辑,默认事件是 Click。例如双击“打开O”菜单项添加Click事件代码:
private void 打开OToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
MessageBox.Show(ofd.FileName);
}
由于C#提供给菜单项CheckOnClick属性显示选中或未选中并不好看,可以考虑替换为更漂亮的图片。为菜单项“保存S” (保存SToolStripMenuItem)Image属性选择一张类似“X”的图片(x.png)表示未选中,同时准备一张类似“√”的图片(r.png)表示选中,修改“保存S”的Click事件代码:
private void 保存SToolStripMenuItem_Click(object sender, EventArgs e)
{
//将sender转换为ToolStripMenuItem,并赋值给定义的ToolStripMenuItem
ToolStripMenuItem menuSave = (ToolStripMenuItem)sender;
//当菜单项没有选中,该菜单项图标为x.png,否则为r.png
if (menuSave.Checked == false)
menuSave.Image = Image.FromFile("c:\\lessons\\x.png");
else
menuSave.Image = Image.FromFile("c:\\lessons\\r.png");
}
运行结果如下图所示:
、
图8-65 当“保存S”被选中时显示为“X”图片
【例 8.46】【项目:code8-046】通过代码在窗体上建立菜单。
增加菜单项及其对应事件的代码:
private void button1_Click(object sender, EventArgs e)
{
//定义msMain为MenuStrip类型
MenuStrip msMain = new MenuStrip();
//定义tsmiFile为ToolStripMenuItem类型
ToolStripMenuItem tsmiFile = new ToolStripMenuItem();
//设置菜单项显示的文本
tsmiFile.Text = "文件(&F)";
//定义tsmiFileOpen为ToolStripMenuItem类型
ToolStripMenuItem tsmiFileOpen = new ToolStripMenuItem();
//设置菜单项显示的文本
tsmiFileOpen.Text = "打开(&O)";
//定义tsmiFileSave为ToolStripMenuItem类型
ToolStripMenuItem tsmiFileSave = new ToolStripMenuItem();
tsmiFileSave.Text = "保存(&S)";
//此菜单项显示的图标
tsmiFileSave.Image = Image.FromFile("c:\\lessons\\x.png");
//此菜单项可以被选中或未选中
tsmiFileSave.CheckOnClick = true;
//此菜单项当前未选中
tsmiFileSave.Checked = false;
//将tsmiFileOpen和tsmiFileSave加入tsmiFile下拉菜单项
tsmiFile.DropDownItems.Add(tsmiFileOpen);
tsmiFile.DropDownItems.Add(tsmiFileSave);
//将tsmiFile加入msMain菜单项
msMain.Items.Add(tsmiFile);
//将msMain加入窗体控件中,不用像其它控件一样指定位置
this.Controls.Add(msMain);
//将tsmiFileOpen菜单项的Click事件和mnuFileOpen_Click方法关联
tsmiFileOpen.Click += mnuFileOpen_Click;
//将tsmiFileSave菜单项的Click事件和mnuFileSave_Click方法关联
tsmiFileSave.Click += mnuFileSave_Click;
}
关联的方法:
//实际处理tsmiFileOpen.Click事件
private void mnuFileOpen_Click(Object sender , EventArgs e )
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
MessageBox.Show(ofd.FileName);
}
//实际处理tsmiFileSave.Click事件
private void mnuFileSave_Click(Object sender, EventArgs e) //
{
ToolStripMenuItem menuSave = (ToolStripMenuItem)sender;
if (menuSave.Checked)
menuSave.Image = Image.FromFile("c:\\lessons\\r.png");
else
menuSave.Image = Image.FromFile("c:\\lessons\\x.png");
}
运行结果如下图所示:
图8-66 运行时增加菜单项
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录