加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

(C#)一个有菜单/状态栏/工具栏的MDI窗体

(2011-11-17 16:28:21)
标签:

菜单

状态栏

工具栏

mdi窗体

csharp

分类: C#笔记

(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项目属性窗口,还可设置其它属性(略))

 *

 * 二)创建一个名为MainFormMDI窗体

 * 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事件代码中,添加代码,以“无模式”方式打开一个子窗体

    (详见代码)

 

 * 六)为主窗体添加背景图片

    可视设计界面,在属性窗口中找到MainFormBackGroundImage属性,选择一张预先备好的图片。

    (本例用的是一张800*500jgp图片[Bim图片也行,但体积太大])

 *   注:vs2005为图片的设置提供两种方法:

       a)从“本地资源”导入

 *    b)从“资源文件”导入     

 *    本例用后一种方法.具体步骤:

 *     1)先将图片copyResource文件夹下.

 *     2)在属性窗口找到Image属性,单击右侧的小钮,打开"选择资源"对话框.

 *      虽然我们已将图片copyResource文件夹下,但Resourcex.resx文件还无没有它的信息,所以

 *       可供选择的资源列表中仍找不到它,需要按下方的"导入"按扭,将图片导入资源,令它出现的资源列表中.

         3)在资源列表中选定图片.

 *

 * 七)加入状态栏

 *   从工具箱中拖出状态栏,在属性窗口中将默认名statusStrip1,改为myStatus

     对状态栏的编辑有两种方式:

     a)在属性窗口中找到myStatus的 “Items ”,单击其右侧的按钮,打开“项集合编辑器”,在“项集合编辑器”中编辑。

     b) 设计时,状态栏有一个小下拉按钮,利用它也可在状态栏中添加控件,然后再在属性窗口中设置属性。

     本例用a)方式进行编辑。

 *   可在状态栏的添加的控件类型有:StatusLabel,ProgressBar(进度条),DropDownButton,SplitButton .

    本例添加两个StatusLabelname属性分别设置为myStatusA,myStatusB

    myStatusA的其它属性设置如下:

 *       Text:主窗体  

             Springtrue; (填满剩余空间,默认值为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.

    本例添加二个buttonname属性分别设为toolButton1, toolButton2

            一个separator

 *       一个splitButton, name属性设为toolSplit1

 *   下面详述toolButton1其它属性设置(该按钮的功能:打开一个有模式的子窗体)

         Text:有模式

 *     TextTipText:打开一个有模式的子窗体 (当鼠标移到按钮时,出现的提示文本) 

 *     DisplayStyle:"ImageAndText" (同时显示图标与文本)

               此属性的其它选项为:none,Text,Image(默认)

 *     TextImageRelation:选"ImageAboveText"(图标在文本上方)

               此属性的其它选项为:OverLay(重叠),TextAboveImageImageBeforText,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);

         

        }

 

     

 

 

      

    }

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有