菜单、工具栏和状态条_第1页
菜单、工具栏和状态条_第2页
菜单、工具栏和状态条_第3页
菜单、工具栏和状态条_第4页
菜单、工具栏和状态条_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、菜单、工具栏和状态条 第四章第四章 菜单、工具栏和状态条菜单、工具栏和状态条 内内 容容 4.1菜单菜单 4.2 工具栏工具栏 4.3 状态栏状态栏 一、通常的约定一、通常的约定 4.1菜单菜单 菜单设计的通俗约定:菜单设计的通俗约定: 若选择菜单会弹出一对话框或窗口,若选择菜单会弹出一对话框或窗口, 那么在该菜单项文本后应设计有那么在该菜单项文本后应设计有 “”。 若某项菜单有子菜单,那么在该菜若某项菜单有子菜单,那么在该菜 单项文本后有单项文本后有“”。 若菜单项需要助记符,则用括号将若菜单项需要助记符,则用括号将 带下划线的字母括起来。带下划线的字母括起来。 若某项菜单有快捷键,则一般将

2、其若某项菜单有快捷键,则一般将其 列在相应菜单项文本之后。列在相应菜单项文本之后。 若有图标,则在其文本左侧显示。若有图标,则在其文本左侧显示。 二、菜单类和菜单事件二、菜单类和菜单事件(P153) 4.1菜单菜单 窗体的主菜单是使用窗体的主菜单是使用MenuStrip类来表示的,它从类来表示的,它从ToolStrip 类派生。在新的类派生。在新的 Windows 窗体应用程序中可使用窗体应用程序中可使用 ToolStrip 及其及其 相关的类来创建相关的类来创建Strips界面(菜单、工具栏、状态栏等)。创建界面(菜单、工具栏、状态栏等)。创建 的这些界面具有的这些界面具有 Windows

3、XP、Office、Internet Explorer 或自或自 定义的外观和行为定义的外观和行为。 MenuStrip控件是窗体菜单结构的容器。操作时实际上是将控件是窗体菜单结构的容器。操作时实际上是将 ToolStripMenuItem 对象添加到表示菜单结构中各对象添加到表示菜单结构中各MenuStrip实实 例中。每个例中。每个 ToolStripMenuItem 可以成为应用程序的命令或其他可以成为应用程序的命令或其他 子菜单项的父菜单。子菜单项的父菜单。 MenuStrip 是是 ToolStripMenuItem、ToolStripComboBox、 ToolStripSepar

4、ator 和和 ToolStripTextBox 等对象的容器。等对象的容器。 一些菜单事件:一些菜单事件: (P153) 三、用设计器编辑菜单三、用设计器编辑菜单 使用菜单实例使用菜单实例 (1) 创建一个创建一个Windows窗体应用程序项目窗体应用程序项目Win_Menu。 (2) 将工具箱中的将工具箱中的MenuStrip组件拖放到窗体上,在窗体模组件拖放到窗体上,在窗体模 版下将出现一个版下将出现一个menuStrip1图标,它是该窗体的一个主菜单。图标,它是该窗体的一个主菜单。 (3) 在在“请在此处键入请在此处键入”框中输入框中输入“文件文件( private: System:V

5、oid On_Change(System:Object sender, System:EventArgs e) this-menuStrip1-Visible=false; this-menuStrip2-Visible=true; private: System:Void On_Exit(System:Object sender, System:EventArgs e) Application:Exit(); private: System:Void On_Return(System:Object sender, System:EventArgs e) this-menuStrip1-Vis

6、ible=true; this-menuStrip2-Visible=false; (7) 编译、连接、运行。编译、连接、运行。 ToolStripItemCollection 类表示类表示 ToolStripItem 对象的集合对象的集合 。 从从ToolStrip派生类的很多属性都与它有关,如派生类的很多属性都与它有关,如MenuStrip类的类的 Items属性、属性、ToolStripMenuItem的的DropDownItems属性等都是属性等都是 ToolStripItemCollection句柄类型,所以通过使用句柄类型,所以通过使用 ToolStripItemCollectio

7、n 的的Add、Remove 和和 RemoveAt 等方法很等方法很 容易在集合中添加和移除单个控件。还可以使用容易在集合中添加和移除单个控件。还可以使用 AddRange 或或 Clear 方法在集合中添加或移除所有控件。方法在集合中添加或移除所有控件。 四、菜单的编程控制四、菜单的编程控制 菜单动态添加和事件处理实例:菜单动态添加和事件处理实例: (1)在前列的)在前列的Win_Menu项目的窗体中添加一个编辑框项目的窗体中添加一个编辑框 textBox1,用来输入菜单项的标题文本,再添加一个,用来输入菜单项的标题文本,再添加一个添加添加按钮按钮 button1。 4.1菜单菜单 (2)

8、 单击单击添加添加按钮,为该控件添加按钮,为该控件添加Click事件代码:事件代码: private: System:Void button1_Click(System:Object sender, System:EventArgs e) String str = this-textBox1-Text; str = str-Trim();/ 去掉字符串前后的空格去掉字符串前后的空格 if (str = = L) MessageBox:Show( L不能添加该菜单项!不能添加该菜单项!,L提示提示 ); return; System:Windows:Forms:ToolStripMenuItem

9、 tempItem; tempItem= gcnew System:Windows:Forms:ToolStripMenuItem(str); tempItem-Click += gcnew System:EventHandler ( this, /添加到添加到menuStrip1中中 /this-menuStrip1-Items-Add(tempItem); /添加到添加到menuStrip1的的 “文件文件” 菜单中菜单中,索引值为,索引值为1 this-toolStripMenuItem1-DropDownItems-Insert(1,tempItem); private: System

10、:Void On_MenuCommand(System:Object sender,System:EventArgs e) System:Windows:Forms:ToolStripMenuItem tempItem= safe_cast(sender); Stringstr = tempItem-Text; if (str-Equals( L退出退出( else MessageBox:Show( str, L你选择了菜单项你选择了菜单项 ); (3)为)为Form1类添加一个公共菜单项类添加一个公共菜单项Click事件的处理方事件的处理方 法法On_MenuCommand: 五、快捷菜单五

11、、快捷菜单 ContextMenuStrip 类表示快捷菜单。快捷菜单通常用于与特类表示快捷菜单。快捷菜单通常用于与特 定情况有关且不适合在定情况有关且不适合在 MenuStrip 中显示的命令。中显示的命令。 许多可视控件(以及许多可视控件(以及 Form 本身)都有一个本身)都有一个 Control.ContextMenuStrip 属性,该属性将属性,该属性将 ContextMenuStrip 类绑定到显示快捷菜单的控件。多个控件可使用一个类绑定到显示快捷菜单的控件。多个控件可使用一个 ContextMenuStrip。 ContextMenuStrip同样是同样是ToolStripMe

12、nuItem、 ToolStripComboBox、ToolStripSeparator 和和 ToolStripTextBox 对对 象的容器。象的容器。 4.1菜单菜单 五、快捷菜单五、快捷菜单 使用快捷菜单实例使用快捷菜单实例 (1)创建创建Windows窗体应用程序项目窗体应用程序项目Win_ContextMenu。 (2)将工具箱中的将工具箱中的ContextMenuStrip组件拖放到窗体上,创组件拖放到窗体上,创 建一个快捷菜单建一个快捷菜单ContextMenuStrip1。依次添加三个菜单项,分。依次添加三个菜单项,分 别为别为“菜单项菜单项1”、“菜单项菜单项2”、“菜单项

13、菜单项3”。 (3) 在在Form1窗体中添加三个窗体中添加三个TextBox控件,并在控件,并在TextBox控控 件的属性窗口中,将件的属性窗口中,将ContextMenuStrip属性选择为属性选择为 ContextMenuStrip1。 (4) 为为Form1窗体添加窗体添加MouseDown事件处理方法,为事件处理方法,为 ContextMenuStrip1添加添加Opening事件。它们的代码:事件。它们的代码: 4.1菜单菜单 private: System:Void Form1_MouseDown(System:Object sender, System:Windows:For

14、ms:MouseEventArgs e) if (e-Button = System:Windows:Forms:MouseButtons:Right) / 右击鼠标右击鼠标 this-contextMenuStrip1-Show( this, System:Drawing:Point( e-X, e-Y ); private: System:Void contextMenuStrip1_Opening (System:Object sender, System:ComponentModel:CancelEventArgs e) this-ToolStripMenuItem1-Enabled

15、= true; this-ToolStripMenuItem2-Enabled = true; this-ToolStripMenuItem3-Enabled = true; if (this-contextMenuStrip1-SourceControl = this-textBox1) this-ToolStripMenuItem1-Enabled = false; else if (this-contextMenuStrip1-SourceControl = this-textBox2) this-ToolStripMenuItem2-Enabled = false; else if(t

16、his-contextMenuStrip1-SourceControl =this-textBox3) this-ToolStripMenuItem3-Enabled = false; 在新的在新的 Windows 窗体应用程序中使用窗体应用程序中使用 ToolStrip 及其相关的及其相关的 类来创建工具栏,这些工具栏具有类来创建工具栏,这些工具栏具有 Windows XP、Office、 Internet Explorer的特征或自定义的外观和行为。的特征或自定义的外观和行为。ToolStrip 控件控件 也提供丰富的设计时体验,包括就地激活和编辑、自定义布局也提供丰富的设计时体验,包括就

17、地激活和编辑、自定义布局 等。等。 尽管尽管 ToolStrip 类提供了许多可管理绘制、鼠标和键盘输入类提供了许多可管理绘制、鼠标和键盘输入 以及拖放功能的成员,但是用户也可以使用以及拖放功能的成员,但是用户也可以使用 ToolStripManager 类类 在指定的在指定的 ToolStripContainer 内联接内联接 ToolStrip 控件,以及将控件,以及将 ToolStrip 控件相互合并。通过将控件相互合并。通过将 ToolStripRenderer 类和类和 ToolStripManager 类结合使用,可以获得对绘制样式和布局样式类结合使用,可以获得对绘制样式和布局样式

18、 的更好控制和更多的自定义功能。的更好控制和更多的自定义功能。 4.2 工具栏工具栏(P160) 4.2 工具栏工具栏 ToolStrip 也是也是ToolStripButton、ToolStripComboBox、 ToolStripSplitButton、ToolStripLabel、ToolStripSeparator、 ToolStripDropDownButton、ToolStripProgressBar 和和 ToolStripTextBox 对象的容器。对象的容器。 总之,总之,ToolStrip 控件为高度可配置的、可扩展的控件,它控件为高度可配置的、可扩展的控件,它 提供了许

19、多属性、方法和事件,可用来自定义外观和行为。提供了许多属性、方法和事件,可用来自定义外观和行为。 StatusStrip 控件用于向用户显示操作的状态信息,或显示操控件用于向用户显示操作的状态信息,或显示操 作对象在应用程序中相关的上下文信息。通常作对象在应用程序中相关的上下文信息。通常 StatusStrip 控件控件 由由 ToolStripStatusLabel 对象组成,其中每个对象都可显示文本对象组成,其中每个对象都可显示文本 或图标。或图标。StatusStrip 还可包含还可包含 ToolStripDropDownButton、 ToolStripSplitButton 和和 T

20、oolStripProgressBar 控件。控件。 默认的默认的 StatusStrip 没有面板。若要将面板添加到没有面板。若要将面板添加到 StatusStrip,请使用,请使用 ToolStripItemCollection.AddRange 方法,方法, 或使用或使用 StatusStrip 项集合编辑器在设计时添加、移除或重新排项集合编辑器在设计时添加、移除或重新排 序项并修改属性。序项并修改属性。 4.3 状态栏状态栏(P164) 实例:简单的记事本应用程序实例:简单的记事本应用程序 一、一、 创建记事本窗体和菜单创建记事本窗体和菜单 (1)创建一个)创建一个Windows窗体应

21、用程序窗体应用程序Win_NotePad。 (2)将工具箱中的)将工具箱中的TextBox控件拖放到窗体中,其控件拖放到窗体中,其Name属属 性为性为pTextBox,将,将AcceptsReturn(是否允许输入回车符)和(是否允许输入回车符)和 AcceptsTab (是否允许输入(是否允许输入tab符)属性设为符)属性设为True,将,将Dock属属 性设为性设为Fill,将,将Multiline属性设为属性设为True,将,将ScrollBars属性设为属性设为 Both,将,将WordWrap(是否自动换行)属性设为(是否自动换行)属性设为False。 (3) 将工具箱中的将工具箱

22、中的MenuStrip组件拖放到窗体上,创建了主组件拖放到窗体上,创建了主 菜单菜单menuStrip1。添加一个顶层菜单项。添加一个顶层菜单项“文件文件( size=System:Drawing:Size( this-ClientSize.Width, this-ClientSize.Height - this-statusStrip1-Height); this-pTextBox-Size = size; 三、三、 显示日期时间和鼠标位置显示日期时间和鼠标位置 (1)将工具箱中的)将工具箱中的Timer组件拖放到窗体中,添加并创建组件拖放到窗体中,添加并创建 了一个了一个Timer组件组件

23、timer1,将,将Enabled属性设为属性设为True,该其添加,该其添加 Tick事件事件On_Timer,代码:,代码: private: System:Void On_Timer(System:Object sender, System:EventArgs e) this-toolStripStatusLabel6-Text= System:DateTime:Now.ToLongTimeString(); (2)为)为TextBox控件添加控件添加MouseMove事件事件 On_MouseMove,代码:,代码: private: System:Void On_MouseMove(

24、System:Object sender, System:Windows:Forms:MouseEventArgs e) String str=String:Concat(LX:, e-X.ToString(), L, Y:,e-Y.ToString(); this-toolStripStatusLabel5-Text = str; 四、显示特殊键状态四、显示特殊键状态 (1) 打开打开Form1.h文件,添加文件,添加GetKeyState函数导入代码:函数导入代码: using namespace System:Runtime:InteropServices; DllImport(user

25、32.dll, EntryPoint = GetKeyState“, CharSet =CharSet:Unicode) short GetKeyState( int nVirtKey); (2) 在在Form1类定义一个类定义一个UpdateKeyPanel函数,用来根据函数,用来根据 Caps Lock、Num Lock和和Scroll Lock键的状态更新状态栏的相应键的状态更新状态栏的相应 窗格:窗格: private: void UpdateKeyPanel(void) short nCaps = GetKeyState( 20 );/ Caps Lock键值为键值为 if ( nC

26、aps != 0 )/ Caps Lock键灯亮时键灯亮时 this-toolStripStatusLabel2-Text = L大写大写; else this-toolStripStatusLabel2-Text = L小写小写; nCaps = GetKeyState( 144 ); / Num Lock键值为键值为 if ( nCaps != 0 )/ Num Lock键灯亮时键灯亮时 this-toolStripStatusLabel3-Text = L数字数字; else this-toolStripStatusLabel3-Text = L; nCaps = GetKeyState

27、( 145 );/ Scroll Lock键值为键值为 if ( nCaps != 0 ) / Scroll Lock 键灯亮时键灯亮时 this-toolStripStatusLabel4-Text = L滚动滚动; else this-toolStripStatusLabel4-Text = L; (3) 为窗体添加为窗体添加Load事件事件On_Load,代码:,代码: private: System:Void On_Load(System:Object sender, System:EventArgs e) UpdateKeyPanel(); (4) 为为pTextBox控件添加控件添

28、加KeyDown和和KeyUp事件的共同处理事件的共同处理 方法方法On_Key,代码:,代码: private: System:Void On_Key(System:Object sender, System:Windows:Forms:KeyEventArgs e) UpdateKeyPanel(); (5) 编译运行并测试。编译运行并测试。 五、菜单功能的实现五、菜单功能的实现 (1) 添加支持文件流的命名空间:添加支持文件流的命名空间: using namespace System:IO; (2) 为菜单项为菜单项“新建新建( private: System:Void On_New s

29、ender, System:EventArgs e) this-Text = L简单记事本简单记事本-无标题无标题; this-pTextBox-Text = L; / 清除编辑框中的内容清除编辑框中的内容 this-Select( 0, 0 ); / 将插入符移到第将插入符移到第( 0, 0 )位置位置 this-pTextBox-Modified = false; this-str = L; private: System:Void On_Open sender, System:EventArgs e) Open pOFD = gcnew Open(); pOFD-Filter = L文本

30、文件文本文件(*.txt)|*.txt|所有文件所有文件(*.*)|*.*; pOFD-DefaultExt = Ltxt; System:Windows:Forms:DialogResult nResult = pOFD-ShowDialog(); if (nResult = System:Windows:Forms:DialogResult:OK) str = pOFD-; StreamReader pReader = gcnew StreamReader( str, System:Text:Encoding:Default ); this-pTextBox-Text = pReader-

31、ReadToEnd(); this-pTextBox-Select( 0, 0 ); this-pTextBox-Modified = false; this-Text = String:Concat( L简单记事本简单记事本-, str ); pReader-Close(); private: System:Void On_Save sender, System:EventArgs e) if (strLength = 0) / 无文件名无文件名 Save pSFD = gcnew Save(); pSFD-Filter = L文本文件文本文件(*.txt)|*.txt|所有件所有件(*.*

32、)|*.*; pSFD-DefaultExt = Ltxt; System:Windows:Forms:DialogResult nResult = pSFD-ShowDialog(); if (nResult = System:Windows:Forms:DialogResult:OK) str = pSFD-; else return; StreamWriter pWriter = ( str ); int nLength = this-pTextBox-Text-Length; pWriter-Write(pTextBox-Text-ToCharArray(),0,nLength); p

33、Writer-Close(); this-pTextBox-Modified = false; this-Text = String:Concat( L简单记事本简单记事本-, str ); private: System:Void On_Exit(System:Object sender, System:EventArgs e) this-Close(); 六、菜单功能的细化六、菜单功能的细化 编辑框中原有的内容被修改后,当用户选择编辑框中原有的内容被修改后,当用户选择“新建新建”、“打打 开开”或或“退出退出”菜单命令时,应提醒是否保存操作。通过检测文菜单命令时,应提醒是否保存操作。通过检

34、测文 本框的本框的modified属性可完成该操作。属性可完成该操作。 (1) 在事件处理方法在事件处理方法On_Load中添加下列代码:中添加下列代码: On_NewFile( sender, e ); 最初应为空文档,供用户操作。最初应为空文档,供用户操作。 (2)添加如下让用户进行保存操作的函数,通过检测文本框的添加如下让用户进行保存操作的函数,通过检测文本框的 Modified属性完成,其代码如下:属性完成,其代码如下: private: bool DoModified() if (!(pTextBox-Modified) return true;/ 没有修改没有修改 System:Windows:Forms:DialogResult nRes = MessageBox:Show(L当前文件中的内容有修改,需要保当前文件中的内容有修改,需要保 存吗?存吗?, L简单记事本简单记事本, MessageBoxButtons:YesNoCancel ); / 显示消息对话框显示消息对话框 switch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论