(C#)一个有菜单,状态栏,工具栏的MDI窗体myMenuA
*实现功能:
*
一个有菜单,状态栏,工具栏的MDI窗体.可通过菜单项或工具栏中的按钮打开一个有模式(或无模式)的子窗体.
*
*
* 要点:
*
1)通过项目属性窗口,设置项目属性(本例仅设置图标属性,其余略)
* 2)设置MDI窗体
*
2)创建菜单,设置菜单的Enabled属性,添加各菜单项的click事件
* 3)在某一菜单项中打开一个有模式窗体
* 在某一菜单项中打开一个无模式窗体
* 4)为主窗体添加背景图片
* 5)在VS2005中绘制简单图标
* 6)状态栏
* 7)工具栏
*
* * 步骤:
* 一)创建项目
* 1)创建一个C#Windows项目,名为myMenuA
* 2)在VS2005中绘制一个简单的图标(.ICO)
*
菜单:项目>myMenu属性,打开myMenu项目属性的设置窗口,该窗口有“应用程序”,“生成”,“生成事件”,“资源”
*
等多个页面,选“资源”,在“添加资源”选"添加图标",在打开的窗口中绘制一个简单的图标。
*
(生成的图标默认存放位置:myMenuA\Resources\}
* 3)为项目指定一个图标
*
在打开myMenu项目属性的设置性窗口,选“应用程序”,在“图标”一栏中选定预先准备好的图标。
*
(编译的可执行程序文件(EXE)以该图标显示)
*
(通过myMenu项目属性窗口,还可设置其它属性(略))
*
* 二)创建一个名为MainForm的MDI窗体
*
1)菜单:视图>解决方案资源管理器,打开解决方案资源管理器,
*
右击原默认名为Form1.cs的文件重命名为MainForm.cs
*
(重命名成功后,原Form1.Designer.cs,
Form1.resx将
*
自动更名为MainForm.Designer.cs, MainForm.resx)
*
2)在可视化界面,在属性窗口中找MainForm的“name”属性,将原默认的“Form1”改为"MainForm"
*
在属性窗口中找MainForm的"Text"属性,将原默认的“Form1”改为"MainForm"。
*
(以上两个属性不改亦可)
*
在属性窗口中找Form1的“IsMdiContainer”属性,设为Ture.(MDI窗体)
*
在属性窗口中找Form1的"windowState"属性,将其设为 Maximized。(最大化)
*
(属性窗口可通过菜单:视图>属性窗口 打开)
* 三)在MDI窗体上创建菜单
*
从工具箱中拖出menuStrip放在MDI窗体上,用可视化的方法建一个简单的菜单。
*
(若将菜单项的Enabled属性设为“flase”,该菜单项将呈灰色[不可用])。
*
系统将自动在Form1.Designer.cs中生成有关菜单的代码(最好不要手工修改它)
*
* 四)创建一个子窗体Form11
*
菜单:项目>添加WINDOWS窗体,添加一个窗体,name属性为 Form11
*
为子窗体添加一个退出按钮,该按扭的Click事件代码:
*
Close();
*
* 五)用代码实现从菜单项打开一个子窗体
*
1)在可视化界面,在属性窗口中找到指定的菜单项(本例为"查找"和“替换”)的click事件,双击创建该事件,并添加代码
*
2)在"查找"的click事件代码中,添加代码,以“有模式”方式打开一个子窗体
*
在“替换”的click事件代码中,添加代码,以“无模式”方式打开一个子窗体
*
(详见代码)
*
* 六)为主窗体添加背景图片
*
可视设计界面,在属性窗口中找到MainForm的BackGroundImage属性,选择一张预先备好的图片。
*
(本例用的是一张800*500的jgp图片[Bim图片也行,但体积太大])
* 注:vs2005为图片的设置提供两种方法:
*
a)从“本地资源”导入
* b)从“资源文件”导入
* 本例用后一种方法.具体步骤:
*
1)先将图片copy到Resource文件夹下.
*
2)在属性窗口找到Image属性,单击右侧的小钮,打开"选择资源"对话框.
*
虽然我们已将图片copy到Resource文件夹下,但Resourcex.resx文件还无没有它的信息,所以
*
可供选择的资源列表中仍找不到它,需要按下方的"导入"按扭,将图片导入资源,令它出现的资源列表中.
*
3)在资源列表中选定图片.
*
* 七)加入状态栏
*
从工具箱中拖出状态栏,在属性窗口中将默认名statusStrip1,改为myStatus
*
对状态栏的编辑有两种方式:
*
a)在属性窗口中找到myStatus的 “Items ”,单击其右侧的按钮,打开“项集合编辑器”,在“项集合编辑器”中编辑。
*
b) 设计时,状态栏有一个小下拉按钮,利用它也可在状态栏中添加控件,然后再在属性窗口中设置属性。
*
本例用a)方式进行编辑。
*
可在状态栏的添加的控件类型有:StatusLabel,ProgressBar(进度条),DropDownButton,SplitButton
.
*
本例添加两个StatusLabel,name属性分别设置为myStatusA,myStatusB
*
myStatusA的其它属性设置如下:
*
Text:主窗体;
*
Spring:true; (填满剩余空间,默认值为False. 状态栏诸项中,至少有一项要设为true)
* myStatusB的其它属性设置如下:
*
Text: 操作人:
* Margin: 5,0,5,0
(项与项的间距,依次为Left,Top, right,bottom)
*
Padding:5,0,5,0 (项内间距(项内文本与边框的间隔))
*
在主窗体的属性窗口中找到Shown事件(第一次显示时发生),双击,在该事件中添加代码:
*
myStatusB.Text
= "操作人:CJM";
*
* 八)工具栏
*
从工具箱中拖出工具栏,在属性窗口中将默认名toolStrip1,改为myTool
*
在属性窗口中找到myTool的"ImageScalingSize" 将原默认的(16,16)改为(32,32)
[因为我准备在工具栏的按钮上显示32*32的图标]
*
在属性窗口中找到myTool的 “Items
”,单击其右侧的按钮,打开“项集合编辑器”,在“项集合编辑器”中设工具标的控件的布局。
*
可在状态栏的添加的控件类型有:button,label,
splitButton,comboBox,separator(分隔线),textBox,ProgressBar(进度条),DropDownButton等.
*
本例添加二个button,name属性分别设为toolButton1, toolButton2
*
一个separator
* 一个splitButton,
name属性设为toolSplit1
*
下面详述toolButton1其它属性设置(该按钮的功能:打开一个有模式的子窗体):
*
Text:有模式
*
TextTipText:打开一个有模式的子窗体 (当鼠标移到按钮时,出现的提示文本)
* DisplayStyle:
选"ImageAndText" (同时显示图标与文本)
*
此属性的其它选项为:none,Text,Image(默认))
*
TextImageRelation:选"ImageAboveText"(图标在文本上方).
*
此属性的其它选项为:OverLay(重叠),TextAboveImage,ImageBeforText,TextBeforImage
*
Image: (选择所需要的图标,方法见前述的主窗体的背景图片)
*
(仿照以上方法,设置toolButton2其它属性设置(该按钮的功能:打开一个无模式的子窗体)
*
* 备忘:
* 调试中,突然菜单,工具栏,状态栏上控件全部丢失.
*
解决方法(以工具栏为例):
*
可视设计界面.在空白的工具栏上再添加一个按扭,取名为"AAAAAA", 试运行正常显示该按钮后,
*
打开MainForm.Designer.cs:找到"AAAAAA"字串,发现有一句:
*
this.myTool.Items.AddRange(new
System.Windows.Forms.ToolStripItem[] {
*
this.AAAAAAtoolButton
*
});
* 在其中加入原按扭:
* this.myTool.Items.AddRange(new
System.Windows.Forms.ToolStripItem[] {
*
this.toolButton1,
*
this.toolButton2,
*
this.toolSeparator1,
*
this.toolSplitButton1,
*
this.AAAAAAtoolButton
*
});
*
试运行正常后,再删去"this.AAAAAAtoolButton"
*
*
* 以下是MainForm.cs的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace myMenuA
{
public
partial class MainForm : Form
{
public
MainForm()
{
InitializeComponent();
}
private
void 查找ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form findForm =
new Form11();
findForm.Text = "有模式子窗体";
findForm.ShowDialog(this); //有模式
}
private
void 替换ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form displaceForm
= new Form11();
displaceForm.Text = "无模式子窗体";
displaceForm.Show(); //无模式
}
private
void MainForm_Shown(object sender, EventArgs e)
{
myStatusB.Text = "操作人:CJM";
}
private
void
toolButton1_Click(object sender,
EventArgs e)
{
查找ToolStripMenuItem_Click(
sender, e);
}
private
void 有模式ToolStripMenuItem_Click(object sender, EventArgs e)
{
查找ToolStripMenuItem_Click(
sender, e);
}
private
void 无模式ToolStripMenuItem_Click(object sender, EventArgs e)
{
替换ToolStripMenuItem_Click(sender,
e);
}
}
}
.可通过菜单项或工具栏中的按钮打开一个有模式(或无模式)的子窗体.
*
*
* 要点:
* 1)通过项目属性窗口,设置项目属性(本例仅设置图标属性,其余略)
* 2)设置MDI窗体
* 2)创建菜单,设置菜单的Enabled属性,添加各菜单项的click事件
* 3)在某一菜单项中打开一个有模式窗体
* 在某一菜单项中打开一个无模式窗体
* 4)为主窗体添加背景图片
* 5)在VS2005中绘制简单图标
* 6)状态栏
* 7)工具栏
*
* * 步骤:
* 一)创建项目
* 1)创建一个C#Windows项目,名为myMenuA
* 2)在VS2005中绘制一个简单的图标(.ICO)
*
菜单:项目>myMenu属性,打开myMenu项目属性的设置窗口,该窗口有“应用程序”,“生成”,“生成事件”,“资源”
*
等多个页面,选“资源”,在“添加资源”选"添加图标",在打开的窗口中绘制一个简单的图标。
*
(生成的图标默认存放位置:myMenuA\Resources\}
* 3)为项目指定一个图标
*
在打开myMenu项目属性的设置性窗口,选“应用程序”,在“图标”一栏中选定预先准备好的图标。
*
(编译的可执行程序文件(EXE)以该图标显示)
*
(通过myMenu项目属性窗口,还可设置其它属性(略))
*
* 二)创建一个名为MainForm的MDI窗体
* 1)菜单:视图>解决方案资源管理器,打开解决方案资源管理器,
*
右击原默认名为Form1.cs的文件重命名为MainForm.cs
*
(重命名成功后,原Form1.Designer.cs,
Form1.resx将
*
自动更名为MainForm.Designer.cs,
MainForm.resx)
* 2)在可视化界面,在属性窗口中找MainForm的“name”属性,将原默认的“Form1”改为"MainForm"
* 在属性窗口中找MainForm的"Text"属性,将原默认的“Form1”改为"MainForm"。
*
(以上两个属性不改亦可)
*
在属性窗口中找Form1的“IsMdiContainer”属性,设为Ture.(MDI窗体)
* 在属性窗口中找Form1的"windowState"属性,将其设为 Maximized。(最大化)
*
(属性窗口可通过菜单:视图>属性窗口 打开)
* 三)在MDI窗体上创建菜单
*
从工具箱中拖出menuStrip放在MDI窗体上,用可视化的方法建一个简单的菜单。
*
(若将菜单项的Enabled属性设为“flase”,该菜单项将呈灰色[不可用])。
*
系统将自动在Form1.Designer.cs中生成有关菜单的代码(最好不要手工修改它)
*
* 四)创建一个子窗体Form11
*
菜单:项目>添加WINDOWS窗体,添加一个窗体,name属性为 Form11
*
为子窗体添加一个退出按钮,该按扭的Click事件代码:
*
Close();
*
* 五)用代码实现从菜单项打开一个子窗体
* 1)在可视化界面,在属性窗口中找到指定的菜单项(本例为"查找"和“替换”)的click事件,双击创建该事件,并添加代码
* 2)在"查找"的click事件代码中,添加代码,以“有模式”方式打开一个子窗体
*
在“替换”的click事件代码中,添加代码,以“无模式”方式打开一个子窗体
*
(详见代码)
*
* 六)为主窗体添加背景图片
*
可视设计界面,在属性窗口中找到MainForm的BackGroundImage属性,选择一张预先备好的图片。
*
(本例用的是一张800*500的jgp图片[Bim图片也行,但体积太大])
* 注:vs2005为图片的设置提供两种方法:
*
a)从“本地资源”导入
* b)从“资源文件”导入
* 本例用后一种方法.具体步骤:
* 1)先将图片copy到Resource文件夹下.
* 2)在属性窗口找到Image属性,单击右侧的小钮,打开"选择资源"对话框.
* 虽然我们已将图片copy到Resource文件夹下,但Resourcex.resx文件还无没有它的信息,所以
* 可供选择的资源列表中仍找不到它,需要按下方的"导入"按扭,将图片导入资源,令它出现的资源列表中.
*
3)在资源列表中选定图片.
*
* 七)加入状态栏
* 从工具箱中拖出状态栏,在属性窗口中将默认名statusStrip1,改为myStatus
*
对状态栏的编辑有两种方式:
*
a)在属性窗口中找到myStatus的 “Items ”,单击其右侧的按钮,打开“项集合编辑器”,在“项集合编辑器”中编辑。
*
b) 设计时,状态栏有一个小下拉按钮,利用它也可在状态栏中添加控件,然后再在属性窗口中设置属性。
*
本例用a)方式进行编辑。
* 可在状态栏的添加的控件类型有:StatusLabel,ProgressBar(进度条),DropDownButton,SplitButton
.
*
本例添加两个StatusLabel,name属性分别设置为myStatusA,myStatusB
*
myStatusA的其它属性设置如下:
* Text:主窗体;
*
Spring:true;
(填满剩余空间,默认值为False. 状态栏诸项中,至少有一项要设为true)
* myStatusB的其它属性设置如下:
*
Text: 操作人:
* Margin: 5,0,5,0
(项与项的间距,依次为Left,Top,
right,bottom)
*
Padding:5,0,5,0 (项内间距(项内文本与边框的间隔))
*
在主窗体的属性窗口中找到Shown事件(第一次显示时发生),双击,在该事件中添加代码:
*
myStatusB.Text
= "操作人:CJM";
*
* 八)工具栏
* 从工具箱中拖出工具栏,在属性窗口中将默认名toolStrip1,改为myTool
* 在属性窗口中找到myTool的"ImageScalingSize" 将原默认的(16,16)改为(32,32)
[因为我准备在工具栏的按钮上显示32*32的图标]
*
在属性窗口中找到myTool的 “Items ”,单击其右侧的按钮,打开“项集合编辑器”,在“项集合编辑器”中设工具标的控件的布局。
*
可在状态栏的添加的控件类型有:button,label,
splitButton,comboBox,separator(分隔线),textBox,ProgressBar(进度条),DropDownButton等.
*
本例添加二个button,name属性分别设为toolButton1, toolButton2
*
一个separator
* 一个splitButton, name属性设为toolSplit1
* 下面详述toolButton1其它属性设置(该按钮的功能:打开一个有模式的子窗体):
*
Text:有模式
* TextTipText:打开一个有模式的子窗体 (当鼠标移到按钮时,出现的提示文本)
* DisplayStyle:
选"ImageAndText"
(同时显示图标与文本)
*
此属性的其它选项为:none,Text,Image(默认))
* TextImageRelation:选"ImageAboveText"(图标在文本上方).
*
此属性的其它选项为:OverLay(重叠),TextAboveImage,ImageBeforText,TextBeforImage
*
Image: (选择所需要的图标,方法见前述的主窗体的背景图片)
*
(仿照以上方法,设置toolButton2其它属性设置(该按钮的功能:打开一个无模式的子窗体)
*
* 备忘:
* 调试中,突然菜单,工具栏,状态栏上控件全部丢失.
*
解决方法(以工具栏为例):
* 可视设计界面.在空白的工具栏上再添加一个按扭,取名为"AAAAAA", 试运行正常显示该按钮后,
* 打开MainForm.Designer.cs:找到"AAAAAA"字串,发现有一句:
* this.myTool.Items.AddRange(new
System.Windows.Forms.ToolStripItem[] {
*
this.AAAAAAtoolButton
*
});
* 在其中加入原按扭:
* this.myTool.Items.AddRange(new
System.Windows.Forms.ToolStripItem[] {
*
this.toolButton1,
*
this.toolButton2,
*
this.toolSeparator1,
*
this.toolSplitButton1,
*
this.AAAAAAtoolButton
*
});
*
试运行正常后,再删去"this.AAAAAAtoolButton"
*
*
* 以下是MainForm.cs的代码:
* * */
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace myMenuA
{
public
partial class MainForm : Form
{
public
MainForm()
{
InitializeComponent();
}
private
void 查找ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form findForm =
new Form11();
findForm.Text = "有模式子窗体";
findForm.ShowDialog(this); //有模式
}
private
void 替换ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form displaceForm
= new Form11();
displaceForm.Text = "无模式子窗体";
displaceForm.Show(); //无模式
}
private
void MainForm_Shown(object sender, EventArgs e)
{
myStatusB.Text = "操作人:CJM";
}
private
void
toolButton1_Click(object sender,
EventArgs e)
{
查找ToolStripMenuItem_Click(
sender, e);
}
private
void 有模式ToolStripMenuItem_Click(object sender, EventArgs e)
{
查找ToolStripMenuItem_Click(
sender, e);
}
private
void 无模式ToolStripMenuItem_Click(object sender, EventArgs e)
{
替换ToolStripMenuItem_Click(sender,
e);
}
}
}
加载中,请稍候......