C#Windows窗体界⾯设计_05_添加菜单栏⼯具栏状态栏按钮binzhouweichao@163
2013-10-17
仍然使⽤上篇的项⽬。
实现的作⽤为:
通过菜单栏,或⼯具栏,或按钮,实现图⽚框中图像的显⽰和隐藏。
1. 更改窗体⼤⼩
由于添加的控件⽐较多,默认的窗体300*300肯定不够⽤的,需要将窗体⼤⼩调⼤。现更改为800*600。
打开TriPaint.cs[设计]⽂件,选中窗体,在右下⾓的属性窗⼝中,到Size属性,将值改为:800, 600。
2. 添加菜单栏MenuStrip控件
选中窗体,打开左侧的⼯具箱,到MenuStrip控件,点击⿏标左键并拖到窗体中。
菜单栏的默认位置为窗体顶部,默认宽度为24,长度为铺满窗体。第⼀个添加的MenuStrip控件的名称默认为menuStrip1。在右下⾓的属性窗⼝中,可以到具体的数据,如:
位置Location为:0, 0。也就是说,menuStrip1的右上⾓(0, 0)位于窗体的右上⾓(0, 0)位置。
长宽Size为:784, 24。也就是说,menuStrip1的长为784,正好是窗体内容纳控件的最⼤长度,宽度为24,应该是MenuStrip控件默认的宽度。
其他属性如Margin、Padding默认即可。
3. 添加⼯具栏ToolStrip控件
同上,在左侧的⼯具箱中到ToolStrip控件并拖到窗体中。
⼯具栏默认位置为菜单栏的下⽅,与菜单栏边界吻合。默认宽度为25,长度为窗体内控件最⼤长度,默认名称为toolStrip1。属性中具体数据:
位置Location:0, 24。即紧贴菜单栏。
长宽Size为:784, 25。即长度为784,宽度为25。
其他属性默认。
4. 添加状态栏StatusStrip控件
同上,在左侧⼯具箱中到StatusStrip控件并拖动到窗体中。
菜单栏默认位置为窗体最下⽅。默认宽度22,长度为窗体内控件最⼤长度,默认名称为statusStrip1。属性中具体数据:
位置Location为:0, 540。也就是状态栏的左上⾓位于窗体的(0, 540)处。
⼤⼩Size为:784, 22。即长度784,宽度22。即最下边界为540+22 = 562处。
整个窗体⾼600,去掉标题栏和边框,⼤约有562的⾼度⽤来容纳控件。
其他属性默认。
5. 调整pictureBox1的位置
由于原先pictureBox1的位置为(0, 0),加上菜单栏和⼯具栏后,上⾯⼀部分被覆盖掉了,所以重新调整⼀下位置,让pictureBox1的上边界紧贴⼯具栏。
通过计算菜单栏和⼯具栏的⾼度和,可得图⽚框的上边界为24+25 = 49,更改图⽚框的属性:
位置Location为:0, 49。
其他属性不变。
6. 添加按钮Button控件
打开左侧⼯具箱,到Button控件,⿏标左键拖到窗体内右侧的空⽩处。位置随意。默认⼤⼩。默认名称为button1。
再添加⼀个Button控件,位置随意,默认⼤⼩,默认名称为button2。
更改按钮的显⽰⽂本。
选中button1控件,在右下⽅的属性窗⼝中,到Text属性,更改其值为:Show。
选中button2控件,在右下⽅的属性窗⼝中,到Text属性,更改其值为:Hide。
上述完成后,运⾏的效果图为:
7. 完善功能
为实现下述功能,需要对pictureBox1.Image反复赋值,其图像为Bitmap b。前⾯的⽂件中,将b作为TriPaint_Load()函数的局部变量,为了实现在其他函数中反复调⽤,需要将其保存为全局变量。这样,
在GlobalVars.cs中,把Bitmap b添加进去,代码如下:
//位图b,为pictureBox1.Image使⽤的值
private static Bitmap b = new Bitmap(250, 250);
public static Bitmap B
{
get { return b; }
set { b = value; }
}
注:由于pictureBox1为主窗体TriPaint的私有成员,其他类⽆法访问,所以初始化位图⼤⼩时⽤了具体的数值。若改动了pictureBox1的⼤⼩,要记得在此处也将⼤⼩改过来。。如果想要把pictureBox1的长宽属性改为public,可以使⽤委托的⽅法,或者在主窗⼝中新建⼀个类,将这个属性设为public。
参考:
这样,GlobalVars.cs的最终代码为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace TriPaint_20131013
{
//修改这⾥
美食食谱网页界面ui设计灵感public static class GlobalVars
{
/
/类似于#define宏定义,设置三个常量
public const int POINTCNT = 50;//点数,POINTCNT <= XMAX - XMIN
public const int XMAX = 200;//X轴最⼤值,也就是2π对应的值
public const int XMIN = 0;//X轴最⼩值
public const double times = (XMAX - XMIN) / (2 * Math.PI - 0);//放⼤倍数
public const double xInterval = (XMAX - XMIN) / (POINTCNT - 1);//i增量对应的data.X增量
//类似于全局变量,可以重新赋值
//坐标点变量
private static Point[] data = new Point[POINTCNT];
public static Point[] Data
{
get { return data; }
set { data = value; }
}
//位图b,为pictureBox1.Image使⽤的值
private static Bitmap b = new Bitmap(250, 250);
public static Bitmap B
{
get { return b; }
set { b = value; }
}
}
}
修改后,需要在TriPaint.cs中,把关于b的声明去掉,对创建g的代码进⾏修改:
Graphics g = Graphics.FromImage(GlobalVars.B);//图像画布添加绘图
另外,因为添加了按钮(菜单、⼯具)等功能,默认情况下,图⽚框中不显⽰绘制的图像,所以把给pictureBox1.Image初始赋值的那⼀条语句注释掉,即:
//pictureBox1.Image = b;//图像框的图像为上述绘图⽣成的图像
7.1 完善按钮功能
a. 完善按钮button1的显⽰图⽚功能
选中button1,也就是Show按钮,双击,则会实现:在主窗体的类(即TriPaint类)中添加button1_Click()事件函数,并将Show按钮的Click事件与函数button1_Click()关联起来。
在此函数中添加如下代码:
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = GlobalVars.B;//显⽰图像b
pictureBox1.Refresh();//刷新图⽚框
}
因为会返回修改Image的值,所以每个事件函数都要对pictureBox1刷新⼀下。
b. 完善按钮button2的隐藏图⽚功能
同上,选中button2,即Hide按钮,双击,主窗体类中⾃动添加button2_Click()事件函数。在此函数中添加如下代码:
private void button2_Click(object sender, EventArgs e)
{
pictureBox1.Image = null;//对Image的值置空,刷新后图像就消失了
pictureBox1.Refresh();
}
7.2 完善菜单栏功能
⾸先要添加菜单栏上的菜单。
打开TriPaint.cs[设计]⽂件,选中菜单栏,会显⽰⼀个“请在此键⼊”的⽂本编辑框。
在此⽂本框中输⼊“Show”,这样就向右弹出第⼆个⼀级菜单的⽂本编辑框,向下弹出此菜单的⼆级菜单⽂本输⼊框。
由于我们这个例⼦的功能⽐较简单,只简单演⽰即可,不建⽴⼆级菜单,只建⽴两个⼀级菜单即可。
在右⽅创建“Hide”菜单。
a. 为Show菜单添加显⽰图像功能
同按钮控件,双击Show菜单,即可在TriPaint中⽣成showToolStripMenuItem_Click()事件函数,⾃动关联Show菜单的Click事件。在此函数中添加同button1相同的代码:(直接复制即可)
private void showToolStripMenuItem_Click(object sender, EventArgs e)
{
pictureBox1.Image = GlobalVars.B;//显⽰图像b
pictureBox1.Refresh();//刷新图⽚框
}