C#窗口编程(五)

菜单栏控件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);
}

两个窗口的设计截图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bczheng1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值