java 创建mdi窗体_.Net创建MDI窗体 | 学步园_行走的瓶子Yolo的博客-程序员宅基地

技术标签: java 创建mdi窗体  

多文档界面 (MDI) 应用程序的基本元素是 MDI 子窗体,因为它们是用户交互的中心。

在下面的过程中,将创建显示 RichTextBox 控件的 MDI 子窗体,该子窗体类似于大多数字处理应用程序。将 RichTextBox 控件替换为其他控件(如 DataGrid 控件或混合控件)使您得以创建各种可能的 MDI 子窗口(而且进一步扩展为 MDI 应用程序)。

创建 MDI 子窗体

创建菜单结构中包含顶级菜单项“文件”和“窗口”及菜单项“新建”和“关闭”的 MDI 父窗体。有关创建 MDI 父窗体的更多信息,请参见创建 MDI 父窗体。

在“属性”窗口顶部的下拉列表中,选择与“窗口(&W)”菜单项对应的菜单项,然后将 MdiList 属性设置为 true。

这将使“窗口”菜单能够维护打开的 MDI 子窗口的列表(活动子窗口旁有一个复选标记)。 在解决方案资源管理器中,右击项目,指向“添加”,然后选择“添加新项”。

此窗体将作为 MDI 子窗体的模板。

注意   在此步骤中创建的 MDI 子窗体是标准的 Windows 窗体。因此,它具有 Opacity 属性,该属性允许控制窗体的透明度。但是,Opacity 属性用于顶级窗口。不要将其与 MDI 子窗体同时使用,否则可能会引起绘制问题。

在“添加新项”对话框中,从“模板”窗格中选择“Windows 窗体”(在 Visual Basic 或 Visual C# 中)或“Windows 窗体应用程序 (.NET)”(在 Visual C++ 中)。在“名称”框中,命名窗体 Form2。单击“打开”按钮将该窗体添加到项目中。

Windows 窗体设计器打开,其中显示 Form2。

将 RichTextBox 控件从“工具箱”拖到窗体上。

在“属性”窗口中,将 Anchor 属性设置为“Top, Left”,并将 Dock 属性设置为“Fill”。

这导致即使调整 MDI 子窗体的大小,RichTextBox 控件也会完全填充该窗体的区域。

为“新建”菜单项创建 Click 事件处理程序。有关创建事件处理程序的更多信息,请参见在 Windows 窗体设计器上创建事件处理程序。

插入类似于以下代码的代码,以便在用户单击“新建”菜单项时创建新的 MDI 子窗体(在下面的示例中,事件处理程序处理 MenuItem2 的 Click 事件。请注意,您的“新建”菜单项可能不是 MenuItem2,这取决于应用程序结构的具体情况。)。' Visual Basic

Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click

Dim NewMDIChild As New Form2()

'Set the Parent Form of the Child window.

NewMDIChild.MdiParent = Me

'Display the new form.

NewMDIChild.Show()

End Sub

// C#

protected void MDIChildNew_Click(object sender, System.EventArgs e){

Form2 newMDIChild = new Form2();

// Set the Parent Form of the Child window.

newMDIChild.MdiParent = this;

// Display the new form.

newMDIChild.Show();

}

// C++

private:

System::Void menuItem2_Click(System::Object * sender,

System::EventArgs * e)

{

Form2 *newMDIChild = new Form2();

// Set the Parent Form of the Child window.

newMDIChild->MdiParent = this;

// Display the new form.

newMDIChild->Show();

}在 Visual C++ 中,在 Form1.h 的上面添加以下 #include 指令:

// C++

#include "Form2.h"

按 F5 键运行该应用程序。请注意,通过从“文件”菜单中选择“新建”,可创建新的 MDI 子窗体。该子窗体在“窗口”菜单中被跟踪。

注意   请注意,如果 MDI 子窗体有一个 MainMenu 组件(其菜单结构通常为包含菜单项的菜单结构),并且该子窗体是在一个拥有 MainMenu 组件(其菜单结构通常为包含菜单项的菜单结构)的 MDI 父窗体中打开的,那么在设置了 MergeType 属性(作为可选项,还可以设置 MergeOrder 属性)之后,这两个菜单项会自动合并。请将两个 MainMenu 组件以及该子窗体的所有菜单项的 MergeType 属性都设置为 MergeItems。另外,设置 MergeOrder 属性,以便这两个菜单的菜单项按所需顺序显示。有关使用 MergeOrder 属性确定菜单项位置的更多信息,请参见以编程方式合并菜单项。

注意   切记,关闭 MDI 父窗体时,每个 MDI 子窗体先引发一个 Closing 事件,再引发 MDI 父窗体的 Closing 事件。但是,取消 MDI 子窗体的 Closing 事件不会妨碍引发 MDI 父窗体的 Closing 事件,因为 MDI 父窗体的 Closing 事件的 CancelEventArgs 参数现在会设置为 true。通过将 CancelEventArgs 参数设置为 false 可以强制 MDI 父窗体和所有 MDI 子窗体关闭。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_35806027/article/details/114843706

智能推荐

在Android studio中新建工程_android studio新建工程_茗七的博客-程序员宅基地

###1、打开Android Studio###2、在New Project中选择Empty Activity,点击next###3、工程命名和文件位置###4、点击这里选择Project]###5、查看文件位置_android studio新建工程

iOS 标签自动布局_ios tagsframe_Leonardo_Fibonacci的博客-程序员宅基地

导入SKTagFrame SKTagFrame *frame = [[SKTagFrame alloc] init]; frame.tagsArray = self.bigModel.Tags; // 添加标签 CGFloat first_H = 0; CGFloat total_H = 0; for..._ios tagsframe

跑酷角色左右移控制_跑酷的左右移动代码_HNJAVA201103293613的博客-程序员宅基地

//使角色能够左右移动void MoveLeftOrRight (){if (Input.GetKey (KeyCode.A)) {if (currentHorizontalDistance {return;}transform.Translate (Vector3.left * Time.deltaTime * horizontalMoveSpeed)_跑酷的左右移动代码

Feign客户端指定为Get方式,但是服务端接收的请求却为Post方式_F元凯的博客-程序员宅基地

文章目录背景问题解决方案背景在服务端,暴露了一个接口,是get方式请求的。然后客户端的请求代码如下:@FeignClient("fyk-business-cxf/testQqOnline")public interface QqOnlineFeignClient { @GetMapping("/qqCheckOnline") public String qqCheckOnline(St...

serviceloader java_详谈ServiceLoader实现原理-程序员宅基地

在java中根据一个子类获取其父类或接口信息非常方便,但是根据一个接口获取该接口的所有实现类却没那么容易。有一种比较笨的办法就是扫描classpath所有的class与jar包中的class,然后用ClassLoader加载进来,然后再判断是否是给定接口的子类。但是很显然,不会使用这种方法,代价太大。java本身也提供了一种方式来获取一个接口的子类,那就是使用java.util.ServiceLo..._java serviceloader 原理

大学开学第一天——计算机达人成长之路(32)_weixin_34336292的博客-程序员宅基地

1、入学了大家还能记起进入大学的感觉吗?一种全新的生活,一个陌生的校园,一种莫名的兴奋,一种激烈的渴望,还有一群具有同样思想的朋友。虽然木鸿飞已经在XT大学待了很久了,但仍然架不住开学的激情。头一天晚上,木鸿飞就开始整理箱子,被子、衣服、鞋子、洗漱用品等等,收拾了一遍又一遍,却总是担心,无数次的咨询哥哥还遗漏了什么。哥哥显得相当无辜,“又不是出远门..._大学开学第一天带电脑可以嘛

随便推点

从Kotlin源代码反编译和解散JVM字节码_cunxiedian8614的博客-程序员宅基地

这是尝试为此Kotlin代码使用javap(反汇编程序)和jad(反编译..._kotlin反编译

搜集了一些能够返回JSON格式的服务接口_返回json的接口_码农大圣的博客-程序员宅基地

这里为大家搜集了一些能够返回JSON格式的服务接口。部分需要用JSONP调用。电商接口京东获取单个商品价格接口:http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1 用例 ps:商品ID这么获取:http://item.jd.com/954086.html物流接口快递接口:http://www.kua_返回json的接口

深度学习“四大名著”发布!Python、TensorFlow、机器学习、深度学习四件套(附免费下载)..._普通网友的博客-程序员宅基地

Python 程序员深度学习的“四大名著”:这四本书着实很不错!我们都知道现在机器学习、深度学习的资料太多了,面对海量资源,往往陷入到“无从下手”的困惑出境。而且并非所有的书籍都是优质资..._python深度学习

spring整理(五)Spring Cache_六月长安的博客-程序员宅基地

spring CacheSpring对缓存提供了良好的支持,当然,都是基于AOP的,笔者只介绍两种最常用也最好用的方案Redis缓存Spring将Redis的Handler集成为注解,通过AOP可完美定位于任何位置ConcurrentHashMap缓存这种方案适合于少量数据的缓存,不难看出这个Map是置于堆中...

中间系统到中间系统IS-IS,基本原理与配置详解_中间系统到中间系统的邻居关系有几种_wozuimang的博客-程序员宅基地

一、IS-IS整体架构将Level-1路由器部署在非骨干区域,Level-2路由器和Level-1-2路由器部署在骨干区域。每一个非骨干区域都通过Level-1-2路由器与骨干区域相连!1、在IS-IS中,每个链路可以属于不同的区域,OSPF中每个链路属于同一个区域2、在IS-IS中,单个区域没有物理的骨干与非骨干区域的概念;而在OSPF中,Area0被定义为骨干区域3、在IS-IS中,Level-1和Level-2级别的路由器分别采用SPF算法,分别生成最短路径树SPT;在OSPF中,_中间系统到中间系统的邻居关系有几种

sklearn.metrics【指标】_weixin_30901729的博客-程序员宅基地

【分类指标】1.accuracy_score(y_true,y_pre) : 精度2.auc(x,y,reorder=False) : ROC曲线下的面积;较大的AUC代表了较好的performance。3.average_precision_score(y_true,y_score,average='macro',sample_weight=None):根据预...

推荐文章

热门文章

相关标签