1 / 30

MDI 窗体及菜单控件

MDI 窗体及菜单控件. 《.Net 三层应用结构开发 》 第十一章. 目标. 了解 MDI 应用程序和 SDI 应用程序 了解菜单和掌握菜单控件的使用 了解为什么需要窗体传值 掌握窗体间如何传值 了解单例窗体的概念 掌握代码编写单例窗体 ContextMenuStrip 控件编程 演示应用程序示例. 单文档和多文档 2-1. 这是 Ann 的一个测试. 如已有一个文本文件打开,在同一记事本应用程序中,不允许创建第二个文本文件. 新建一个记事本实例来打开第二个文本文件. 在 SDI 应用程序中一次只能打开一个文件. 单文档和多文档 2-2.

kiora
Download Presentation

MDI 窗体及菜单控件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MDI窗体及菜单控件 《.Net三层应用结构开发》第十一章

  2. 目标 • 了解 MDI 应用程序和 SDI 应用程序 • 了解菜单和掌握菜单控件的使用 • 了解为什么需要窗体传值 • 掌握窗体间如何传值 • 了解单例窗体的概念 • 掌握代码编写单例窗体 • ContextMenuStrip控件编程 • 演示应用程序示例

  3. 单文档和多文档 2-1 这是 Ann 的一个测试 如已有一个文本文件打开,在同一记事本应用程序中,不允许创建第二个文本文件 新建一个记事本实例来打开第二个文本文件 在SDI应用程序中一次只能打开一个文件

  4. 单文档和多文档 2-2 应用程序窗口 在 MDI 应用程序中可以同时打开多个文件 文档窗口

  5. 主窗体和子窗体 3-2 主窗体的特点: • 启动一个 MDI 应用程序时,首先显示父窗体 • 它是应用程序中所有其他窗口的容器 • 每个应用程序界面都只能有一个 MDI 父窗体 • 在任何指定的时间都可以打开多个子窗体 • 任何 MDI 子窗体都不能移出 MDI 框架区域 • 关闭 MDI 父窗体则自动关闭所有打开的 MDI 子窗体

  6. 创建 MDI 窗体 创建 MDI 窗体步骤: • 将 IsMdiContainer属性设置为 True • 选择“项目”“添加 Windows 窗体” • 添加给定的代码,将 TestForm设置为子窗体 TestForm objChild = new TestForm(); objChild.MdiParent = this; objChild.Show();

  7. 主窗体和子窗体 3-3 MDI 应用程序的属性、方法和事件

  8. 主窗体和子窗体 3-3 MDI 应用程序的属性、方法和事件 如果窗体为 MDI 父窗体,则在触发 MDI 父窗体的 Closing 事件之前,将触发所有 MDI 子窗体的 Closing 事件。另外,在触发 MDI 父窗体的 Closed 事件之前,将触发所有 MDI 子窗体的 Closed 事件

  9. 主窗体和子窗体 3-3 Closing 事件的调用顺序: MDI 子窗体 MDI 父窗体

  10. 激活和去激活窗口 显示活动窗口 激活窗口 活动窗口 this.ActivateMdiChild(frmChild); 显示活动窗口的名称 MessageBox.Show(Convert.ToString(this.ActiveMdiChild));

  11. 排列子窗口 MDILayout枚举的成员

  12. 菜单和菜单组件 菜单是程序中显示一个选项列表的图形元素 菜单提供了将命令分组的一致方法 用户易于访问 支持使用访问键启用键盘快捷方式 一个菜单可以带有若干子菜单

  13. 菜单类型 3-1 上下文菜单 在设计阶段将 MainMenu组件添加到窗体上 Menu 类位于 System.Windows.Forms命名空间 MainMenu控件包含多个 MenuItem 控件

  14. 操作步骤

  15. 主要属性 Items集合

  16. 代码添加 //菜单项 ToolStripMenuItem toolstrip=new ToolStripMenuItem("菜单一"); //添加到菜单 this.menuStrip1.Items.Add(toolstrip); //添加子项 toolstrip.DropDownItems.Add("子菜单");

  17. 点击事件

  18. 双向传值 • 解决方案:使用静态变量 这个最简单,只要把变量描述成static就可以了,在Form2中直接引用Form1的变量,代码如下: 在Form1中定义一个static变量public static int i = 9 ; Form2中取得Form1的i值如下: Form1.i.ToString(); 假如Form1取得Form2值,则在Form2中定义public static变量,Form2.变量取得Form2变量值

  19. 窗体一传值给窗体二 • 解决方案:用构造函数 Form1创建Form2,同时传值: Form2 temp = new Form2( 9 ); temp.Show(); Form2 的构造函数这样写: public Form2( int i ) { InitializeComponent(); textBox1.Text = i.ToString(); }

  20. 窗体二传值给窗体一 • 解决方案:利用委托 Form2中先定义一个delegate public delegate void returnvalue( int i ); public returnvalue ReturnValue; Form2 中的button按钮代码如下: private void button1_Click(object sender, System.EventArgs e) { if ( ReturnValue != null ) ReturnValue( 8 ); //触发事件,传递8 }

  21. 窗体二传值给窗体一 • 解决方案:利用委托 Form2 temp = new Form2( ); temp.ReturnValue = new temp.Form2.returnvalue( showvalue ); temp.Show(); private void showvalue( int i ) { textBox1.Text = i.ToString(); } 点击form2的button,form1中的textbox中的值就会相应变化。

  22. 单例窗体 • 场景:用户登录窗体,除了在第一次登录时要用到,在每次切换用户时都要用到 • 普通窗体:每一次都要构造新的窗体实例,占用较多资源 • 单例窗体:确保系统中只能有一个此窗体的实例,每次都使用相同的窗体实例 • 作用: • 控制资源的使用

  23. 单例窗体

  24. 单例窗体代码(一) static SingletonForm login=null; publicstatic SingletonForm CreateForm() { if (login==null) login = new SingletonForm (); return login; } //私有构造函数,避免客户随意创建新的窗体实例 //客户只能通过CreateForm得到同一个窗体实例 private SingletonForm() { InitializeComponent(); }

  25. 单例窗体代码(二) //窗体关闭时释放资源 private void SingletonForm_Closing(object sender, System.ComponentModel.CancelEventArgs e) { login = null; } • 调用单例窗体 SingletonForm f = SingletonForm.CreateForm(); f.Show();

  26. 显示另一窗体 • 非模态窗体:允许用户在当前程序中切换到其他窗口 [被调用的窗体类] [窗体实例] = new [被调用的窗体类](); [窗体实例].Show(); private void cmdShow_Click(object sender, System.EventArgs e) { frmA A = new frmA(); A.Show(); }

  27. 显示另一窗体 • 模态窗体:用户不能在各个窗口间切换 [被调用的窗体类] [窗体实例] = new [被调用的窗体类](); [窗体实例].ShowDialog(); private void cmdShow_Click(object sender, System.EventArgs e) { frmA A = new frmA(); A.ShowDialog(); }

  28. 控件进阶——快捷菜单控件 • ContextMenuStrip :快捷菜单控件 • 为控件指定快捷菜单:ContextMenuStrip 属性 显示与控件关联的菜单

  29. ContextMenuStrip属性和方法 • ContextMenuStrip 控件的主要属性和方法

  30. 总结 • 窗体传值有三种方式:静态变量、构造函数、委托 • 单例窗体:能且只能创建一个实例的窗体 • 单文档界面的某一时刻只能打开一个文档,多文档界面允许同时打开多个文档 • MDI应用程序由一个MDI父窗体和一个或多个子窗体构成 • 菜单是程序中显示一个选项列表的图型元素,它提供将命令分组的方法和用户对其访问的简单途径 • 上下文菜单用于使用户通过单击鼠标右键访问常用的命令

More Related