菜单栏控件MenuStrip
如何添加菜单项,MenuStrip类里的Items属性成员的Add方法可以添加项,Add有五个重载。其中一个可以直接添加文本
如menuStrip1.Items.Add("工具");但是如何添加对应项的Click事件处理函数呢,还是由Add来添加,只不过这个Add函数多了一个参数。
那就是指明项对应的事件处理函数。看下面代码,添加了项文本,菜单项左边显示的图像,以及Click处理函数。
menuStrip1.Items.Add("工具",System.Drawing.Image.FromFile("d:\\Image\\menu2.jpg"),menuItem_Click);
处理函数的定义:
private void menuItem_Click(object sender,System.EventArgs e)
{
System.Windows.Forms.ToolStripMenuItem TSpMenuItem = (System.Windows.Forms.ToolStripMenuItem)sender;
//显示被单击菜单项的文本
System.Windows.Forms.MessageBox.Show(TSpMenuItem.Text);
}
当然如果一个菜单项有下级菜单的话,就不能通过上面那种方法来添加了,要先创建一个ToolStripMenuItem,然后给ToolStripMenuItem类里的Text赋值,设置这个菜单项的文本,然后调用里面的DropDownItems.Add方法,这个Add函数跟Items.Add是一样的,也就是说如果子项还是下级菜单的话,添加的方法也是一样,再创建一个ToolStripMenuItem。
看下例:
//新建一个菜单MenuStrip
System.Windows.Forms.MenuStrip menuStrip1 = new System.Windows.Forms.MenuStrip();
//新建一个菜单项
System.Windows.Forms.ToolStripMenuItem fileTStrip = new System.Windows.Forms.ToolStripMenuItem();
//给菜单项设置文本
fileTStrip.Text = "文件";
//添加事件处理
fileTStrip.Click += menuItem_Click;
//图片对应的属性是fileTStrip.Image,这里不添加了。
//添加"文件"项的子项
fileTStrip.DropDownItems.Add("新建(New)");
fileTStrip.DropDownItems.Add("打开(Open)");
fileTStrip.DropDownItems.Add("保存(Save)");
//把"文件"这个菜单项添加到菜单栏里
menuStrip1.Items.Add(fileTStrip);
//把菜单栏控件添加到Form窗口里
this.Controls.Add(menuStrip1);
上面提到了几个属性,Text(文本),Click(事件),Image(图像)。这里还提一下ToolStripMenuItem类的另外几个属性。
Enabled可以禁用菜单项,为false禁用菜单项,显示灰色。
Checked可以设置菜单项有无勾选,为true,菜单项左边会显示一个“勾”。代替图片。
上面的属性,如果我是直接用Add添加的文本菜单项,该怎么设置呢,也就是这个:
fileTStrip.DropDownItems.Add("打开(Open)");
如果要设置的话,接收Add的返回值,它返回的类型是ToolStripItem,我们可以将它转化为ToolStripMenuItem,如下:
System.Windows.Forms.ToolStripMenuItem TSpItem=
(System.Windows.Forms.ToolStripMenuItem)fileTStrip.DropDownItems.Add("新建(New)");
这样我们就可以设置了,如:TSpItem.Checked=true;
也可以设置它的单击事件处理函数:TSpItem.Click += menuItem_Click;
那么在menuItem_Click处理函里,加上这样一个语句:TSpItem.Checked=!TSpItem.Chekced;就可以使“核记”选项正常的工作了。
需要的时候,判断Chekced为真还是假,然后再做相应的动作。而menuItem_Click函数中也还可以做一些其它的工作。
看一个综合运用的效果图:
实现鼠标右击弹出菜单
右击弹出菜单需要用到类ContextMenuStrip,这也是一个菜单控件,它的创建,添加项,跟MenuStrip没什么区别.创建好了后,只要将它赋给窗口类的ConTextMenuStrip成员就可以实现右击弹出菜单了。
看下例代码:
System.Windows.Forms.ContextMenuStrip contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip();
contextMenuStrip1.Items.Add("新建");
contextMenuStrip1.Items.Add("刷新");
contextMenuStrip1.Items.Add("属性");
this.ContextMenuStrip = contextMenuStrip1;
效果图:
Add如果添加的菜单项有下级菜单的话,方法跟MenuStrip一样,创建一个ToolStripMenuItem对象就可以了。包括设置图像,添加事件处理,都是一样的。
ToolStrip工具栏控件
ToolStrip.Items.Add可以添加项,这个Add方法跟菜单栏Add的方法是一样的(包括返回值是同一种类型的),所以给工具栏项添加,事件,图像什么的我就不说了。只说一下相关的几个属性。
Add方法返回的类型是ToolStripItem,这个在菜单栏控件里提过。在这里我说的就是ToolStripItem类里的一些属性。
AutoSize:指明是否自动调整项大小,如果要自己设置项大小,那么AutoSize就必须为假。
DisplayStyle:项显示方式,是一个System.Windows.Forms.ToolStripItemDisplayStyle枚举类型,指明仅显示图片还是文本,或者两者。
ToolStrip类里的属性:
Dock:设置工具的显示位置,左侧还是上边,或者下面和右侧。
应用示例代码:
//新建工具栏控件ToolStrip
System.Windows.Forms.ToolStrip toolStrip1 = new System.Windows.Forms.ToolStrip();
//新建图像集ImageList
System.Windows.Forms.ImageList imageList1 = new System.Windows.Forms.ImageList();
//添加图标
imageList1.Images.Add(new System.Drawing.Icon("d:\\Image\\1.ico"));
imageList1.Images.Add(new System.Drawing.Icon("d:\\Image\\2.ico"));
imageList1.Images.Add(new System.Drawing.Icon("d:\\Image\\3.ico"));
//设置图标大小
imageList1.ImageSize=new System.Drawing.Size(32,32);
//32位真彩色显示
imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
//引用
toolStrip1.ImageList = imageList1;
//添加第一个项
System.Windows.Forms.ToolStripItem toolStripItem1 = toolStrip1.Items.Add("工 作");
//设置对应的图像索引
toolStripItem1.ImageIndex = 0;
//设置项大小
toolStripItem1.AutoSize = false;
toolStripItem1.Size = new System.Drawing.Size(50,50);
//设置项文本与图像的排列关系是,图像显示在文本上方
toolStripItem1.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
//不自动调整图像大小
toolStripItem1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
//添加第二个项
System.Windows.Forms.ToolStripItem toolStripItem2 = toolStrip1.Items.Add("森 林");
toolStripItem2.ImageIndex = 1;
toolStripItem2.AutoSize = false;
toolStripItem2.Size = new System.Drawing.Size(45, 50);
toolStripItem2.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
toolStripItem2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
//添加第三个项
System.Windows.Forms.ToolStripItem toolStripItem3 = toolStrip1.Items.Add("音 乐");
toolStripItem3.ImageIndex = 2;
toolStripItem3.AutoSize = false;
toolStripItem3.Size = new System.Drawing.Size(50, 50);
toolStripItem3.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText;
toolStripItem3.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
//工具栏控件背景图像
toolStrip1.BackgroundImage = System.Drawing.Image.FromFile("d:\\Image\\barBK.jpg");
//隐藏移动手柄
toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this.Controls.Add(toolStrip1);
效果图:
效果图里的工具栏,图片跟文字感觉不怎么协调。项图片显示,可以用背景图片来代替,然后文字显示在中间,调整一下字体。这样效果可能会好一点。不过这是基本应用工具栏控件。能有这个效果也不错了。
另:ToolStripItem里的ToolTipText属性成员可以设置项文本提示。有两种方法可以设置,其实也就是两种访问项的方式不同而已,
看示例代码:
toolStrip1.Items[0].ToolTipText="这是一个按钮";
第二种:
toolStripItem1.ToolTipText="这是一个按钮"
TabControl标签控件
TabControl标签的设计,我就直接用窗口界面设计器来设计了,一些繁杂的代码也省得去打了。
首先往窗口添加一个TabControl控件,调整至合适的大小,如下:
如果要增加选项(TabPage)的话,上面图片也有示例了,点击标签控件右边一个小三角形按钮,然后就可以依据选项来添加了。
而添加一个选项对应的代码动作就是:
System.Windows.Forms.TabPage tabPage1;
this.tabPage1 = new System.Windows.Forms.TabPage();
this.tabControl1.Controls.Add(this.tabPage1);
大要就是上面那样吧,选项的属性可以通过tabPage1来设置,如tabPage1.Name,tabPage1.Text等。TapPage也是一个控件,它是从
Panel控件派生出来的。
接下来往选项里添加控件,如编辑框,按钮。这些控件要怎么访问呢。其实在代码框里,这些控件是直接定义派生出的Form类下,如果你记得控件名,可以直接访问,但我这里是通过标签控件来访问的。比如要访问tabPage2选项下的button1控件的文本就是。
tabControl1.TabPages[1].Controls[0].Text
不同的控件可以用类型转化,但上面Button类和Control类都有共同属性Text(或者说Button类使用了Control类的Text),所以我就不转化成Button了。
如果一个选项页里有多个控件呢,怎么确定他们的顺序呢,也就是Controls[0]和Controls[1],对应着是哪个控件呢。
这个是以控件的TabIndex属性来决定的,Tab顺序在MFC中也解释过。Tab顺序可以决定两个窗口重叠在一起,重叠部分显示的是哪个窗口。
所以0,1先后根据控件TabIndex来决定,如果一个控件的TabIndex值为0,那么它就是Controls[0]。
添加资源到编译器里
以添加一张JPG图片为例,首先进入“解决方案资源管理器”,打开“Properties”,然后再双击“Resources.resx”,然后按照提示添加就可以了。如下图:
然后再给资源取个名字,或者默认的也可以。。就可以在Properties.Resources下访问了。直接被加载进来了。
图片的类型为Bitmap,如果我刚才导入的图片名为111.jpg,那么Bitmap类型的Properties.Resources._111就对应这张图片。已经加载进来了,可以直接使用,如:this.BackgroundImage = Properties.Resources._111;
添加新窗体,显示模式和非模式对应框
右击"Resoucres",选择添加->Windows 窗体,取名为diaForm。
示图:
这样又新建了一个窗体类,往这个新窗口添加两个控件,Button和TextBox。
Button单击事件处理函数的代码如下:
this.Close();//关闭窗口。
单击按钮就关闭窗口。
而TextBox控件的textBox1成员属性改为公共public(为了在Form1窗口类中访问)。
然后给第一个窗口Form1添加一个按钮,单击事件处理函数代码如下:
private void button1_Click_1(object sender, EventArgs e)
{
//新建窗口
Resources.diaForm newForm = new Resources.diaForm();
//显示模式对应框,非模式是newForm.Show();
//如果是非模式对话框,则代码执行不会停留。也就是不会被阻塞。采用多线程显示。
newForm.ShowDialog();
//输出newForm窗口里的textBox1编辑框值
MessageBox.Show(newForm.textBox1.Text);
}
两个窗口的设计截图: