首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

保证相同类型MDI窗体只会被打开一次方法

本文转载:http://www.cnblogs.com/Ricky81317/archive/2008/09/17/1292443.html 看到论坛中有朋友问,如何可以保证在MDI窗体同一类型窗体只能打开一次...我实现基本思路是: 一般每个子窗体都是继承自Form类型,不同窗体分别代表不同功能,因此只需要判断当前MDI打开窗体类型中有没有当前需要打开窗体类型就行了,如果有,则直接激活,如果没有则创建一个并加到主窗体...具体实现起来有很多种办法,这里只写出一个利用泛型实现: /// /// 打开MDI窗口并附加到MDI主窗口中,如果MDI主窗口中已经存在相同类型窗口,则直接激活 /// /// MDI窗体类型 /// MDI窗体引用 //.../ 当前创建或得到MDI窗体类型实例引用 private T OpenUniqueMDIChildWindow(Form mdiParent) where

99410
您找到你想要的搜索结果了吗?
是的
没有找到

VB 窗体被PictureBox控件挡住无法显示

1、问题描述     VB做机房收费系统时候,用MDI窗体,在主窗体上加了一个Picturebox控件,运行时候,点了窗体,但是却没有出现,后来才发现,窗体被Picturebox控件给当在了后面...2、问题原因    在MDI程序窗体实际位于MDIClient里,就是说,窗体窗体是MDIClient,而PictureBox和MDIClient属于同一    层次结构    ThunderMDIForm-MDIForm1...   --MDIClient    ---ThunderFormDC-Form1  窗体1    ---ThunderFormDC-Form2  窗体2    --ThunderPictureBoxDC...   MDIPictureBox 3、解决办法   用到函数——SetParent函数 Private Declare FunctionSetParent Lib "user32" (ByVal...,frmMain窗体不可以是MDI窗体,要用一般Form窗体,否则的话,当你运行时候,它会提醒你——“实时错误426”,只允许一个MDI窗体

1.4K20

CC++ Qt MdiArea 多窗体组件应用

MDI窗体组件,主要用于设计多文档界面应用程序,该组件具备有多种窗体展示风格,其实现了在父窗体内嵌多种子窗体功能,使用MDI组件需要在UI界面增加mdiArea控件容器,我们所有的窗体创建与操作都在这个容器内进行...MDI窗体控件类似于画布,该控件只具备展示窗体功能,无法实现生成窗体,所以我们需要在项目中手动增加自定义Dialog对话框,并对该对话框进行一定定制。...这个Dialog对话框我们只增加两个功能,一个Dialog::currentFileName()获取窗体标题,另一个Dialog::SetData(QString data)设置数据编辑框,代码实现如下...窗体顶部菜单栏,我们需要手动定义一下他们所具备功能名称等。...on_mdiArea_subWindowActivated 实现设置主窗体名字自身 on_actionSendMsg_triggered 实现主窗体发送消息窗体内 // 当窗体打开时获取到其窗体标题

1K20

CC++ Qt MdiArea 多窗体组件应用

MDI窗体组件,主要用于设计多文档界面应用程序,该组件具备有多种窗体展示风格,其实现了在父窗体内嵌多种子窗体功能,使用MDI组件需要在UI界面增加mdiArea控件容器,我们所有的窗体创建与操作都在这个容器内进行...MDI窗体控件类似于画布,该控件只具备展示窗体功能,无法实现生成窗体,所以我们需要在项目中手动增加自定义Dialog对话框,并对该对话框进行一定定制。...图片这个Dialog对话框我们只增加两个功能,一个Dialog::currentFileName()获取窗体标题,另一个Dialog::SetData(QString data)设置数据编辑框,代码实现如下...图片窗体顶部菜单栏,我们需要手动定义一下他们所具备功能名称等。...on_mdiArea_subWindowActivated 实现设置主窗体名字自身on_actionSendMsg_triggered 实现主窗体发送消息窗体内// 当窗体打开时获取到其窗体标题

1.1K40

构建布局良好Windows程序

() 退出整个应用程序,关闭所有窗体 this.Close()  关闭当前窗体 都会触发FormClosed事件和FormClosing事件 带图片工具栏 属性名称     说明 displaystyle...面板:panel 作为容器使用 工具:Visual Studio"格式"菜单 按住"Ctrl键",选择多个控件 以第一个控件为基准 可以使用anchor(锚定控件) 固定控件与窗体边缘距离 按住Ctrl...键选择多个控件,再设置anchor属性,可以一次选中多个控件 使用dock(停靠控件) dock属性 将控件停靠在窗体边缘或填充窗体 当某个控件需要充满整个窗体时,设置控件dock属性是最快捷方式...SdI:比如记事本 Word等 mdi:多窗口应用程序 比如Excel 浏览器等 至少由连个窗口组成 包括顶级框架窗口(也叫mdi容器)其他文档窗口(也叫窗口) 创建mdi步骤 1父窗体ISMDIIContainer...属性设为true 窗体Mdiparent属性设为父窗体 注意: 设置了MDI窗体不能用SHowDialog() 建立窗体窗口列表步骤 设置父窗体菜单控件mdiwindowlistItem属性选定为窗口菜单项

1.5K60

C#学习笔记—— 常用控件说明及其属性、事件

(24)IsMdiContainer 属性:获取或设置一个值,该值指示窗体是否为多文档界面(MDI窗体容器。值为true时,是窗体容器,值为false时,不是窗体容器。...数组每个元素表示以此窗体作为父级多文档界面(MDI窗体。 (27)MdiParent属性:用来获取或设置此窗体的当前多文档界面(MDI)父窗体。...一个窗口在功能上可能与父窗口其他窗口不同,例如,一个窗口可能用于编辑图像,另一个窗口可能用于编辑文本,第 3 个子窗口可以使用图形来显示数据,但是所有的窗口都属于相同MDI父窗口。...常用MDI窗体属性有: (1)IsMdiChild属性:该属性用来获取一个值,该值指示该窗体是否为多文档界面(MDI窗体。...与MDI应用程序设计有关方法,一般只使用父窗体LayoutMdi方法,该方法调用格式如下: MDI窗体名.LayoutMdi(Value); 该方法用来在MDI窗体中排列MDI窗体,以便导航和操作

9.6K20

C++ Qt开发:MdiArea多窗体组件

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt我们可以通过拖拽方式将不同组件放到指定位置,实现图形化开发极大方便了开发效率,本章将重点介绍MdiArea组件常用方法及灵活运用...该组件主要用于设计多文档界面应用程序,具备有多种窗体展示风格,实现了在父窗体内嵌多种子窗体功能,使开发者能够轻松地创建支持多个文档应用程序。...读者在使用MDI组件时,需要在UI界面增加mdiArea控件容器,之后所有窗体创建与操作都要在容器内进行,其次由于MDI窗体组件仅仅是一个画布只具备限制窗口作用,无法实现生成窗体,所以需要在项目中手动增加自定义...; 1.2 新建与关闭窗体 新建窗体时只需要调用new Dialog创建新窗体,并通过addSubWindow()将新窗体指针加入组件内即可,当关闭时可以直接通过调用closeAllSubWindows...(); } 运行后可以点击打开窗体创建,这个创建是无限制,如下图; 1.3 转换窗体模式 针对模式转换此处提供了三种模式,分别是MDI模式、级联模式及平铺模式,三种模式实现只需要调用不同接口即可实现

80010

VC获取窗体句柄各种方法

该函数检查与特定父窗体相联窗体z序(Z序:垂直屏幕方向,即叠放次序),并返回在z序顶部窗体句柄。...返回值: 假设函数成功,返回值为在Z序顶部窗体句柄。假设指定窗体窗体,返回值为NULL。...(); //得到它HWND   就不会出现故障,由于虽然当pwnd是NULL时,GetSafeHwnd仍然能够用,仅仅是返回NULL IsWindowVisible 函数功能:该函数获得给定窗体可视状态...这个原子(一个16bit值),必须被放置在lpClassName低位字节,lpClassName高位字节置零。...SetWindowText: 至于窗体标题改变,我们能够通过SetWindowText来实现 注:假设窗体本身属性是不显示标题,这个函数调用不会影响窗体属性。

1.1K20

C# 窗体调用父窗体方法(或多窗体之间方法调用)

本文转载:http://www.csframework.com/archive/2/arc-2-20110805-1771.htm 文章侧重点主要是讨论“窗体”与“窗体”之间方法调用,以及“MDI窗体...C# 窗体调用父窗体方法(或多窗体之间方法调用) 看似一个简单功能需求,其实很多初学者处理不好,很多朋友会这么写: C# Code: //父窗体是是frmParent,窗体是frmChildA...//在父窗体打开窗体 frmChildA child = new frmChildA(); child.MdiParent = this; child.Show(); //窗体调父窗体方法...如果父窗体窗体同一个模块内看似没有错,因为这种反向引用在同一个模块内是可行,但程序不能这么写,你把它写死了!固化了!...假设我们项目不断在扩展,需要将父窗体窗体分开在不同模块,这段代码就完了!因为父窗体模块必须引用窗体模块,而窗体需要用到frmParent类,又要引用父窗体模块!

8.1K20

项目中单例模式

在开发C#项目的时候往往会遇到这样场景:整个系统都最小化托盘,然后用户想要双击托盘显示出主界面,而此时你需要在显示主界面的时候弹出一个验证用户信息对话框,要求用户输入密码等来验证。...这样场景就意味着你必须对密码验证框进行单一实例,否者你双击一次托盘就显示一次验证框,到最后就会产生不必要麻烦… 单一模式在《深入浅出设计模式》一书里面算是最最简便一个模式了,主要是为了防止系统多次实例化窗体...要实现单一模式很简单,有很多种方法: 1、只要把该类构造函数设置为私有,而且在该类实例一个该类对象,并在类做一个静态返回该对象就可以了~~不过这里要注意该对象是否为null或者已经IsDisposed...MDI窗体 } return ftb; //返回该对象 } } } 1) 主窗体: namespace 单例模式 { public partial class Form1 : Form {...MDI窗体 } private void ToolStripMenuItemToolbox_Click(object sender, EventArgs e) { FormToolbox.GetInstance

26720

单件模式Singleton来控制窗体被重复或多次打开

注意lazy initialization形式synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton...问题描述:用了单件模式Singleton来控制窗体被重复或多次打开,最初是在MDI窗体写方法,后来看别人是属性,基本是一样,都可以,然后想是,项目中有诺多窗体,如果每个窗体都写一份,岂不太脑残...首先,窗体重复或多次打开问题解决了;然后呢,每个窗体打开时,只要一行代码就搞定了,不用每个窗体写一份属性,方法(其实质还是借鉴Singleton);最后呢,不会出现再次打开不能访问问题,即无法访问已释放对象问题...,比如Form1,代码如下: //Form1为MDI窗体 private void 会员管理ToolStripMenuItem_Click(object sender, EventArgs e)...Singleton.Instance = null; } 这样才不会出问题。

99820

写字板(Windows程序设计)

状态栏显示学生学号、姓名等信息,在窗口标题中显示当前正在编辑文件名 (可选)其他你觉得实用功能:如支持word等 (可选)将其改造成MDI程序:父窗口中包含新建、窗口、帮助等菜单;在运行时,窗口菜单会与其合并...{ richTextBox1.Clear(); saveName = ""; } 写字板操作设置 其他一系列doc加粗,倾斜,下划线,左右对齐...,使代码更加精简高效   这是一个MDI调整窗体使用DropDownItemClicked例子,高效优雅 = v = private void 窗口WToolStripMenuItem_DropDownItemClicked...MdiLayout.TileVertical); break; case "层叠": LayoutMdi(MdiLayout.Cascade); break; } } MDI...使用,是为了让一个父窗体拥有许多个子窗体,进行更加简单有效操作 在父窗体new窗体就行,记得一系列基本操作,你也可以通过生成函数和属性进行快速高效设置 private void 新建ToolStripMenuItem_Click

1K10

【大话设计模式】——深入浅出单例模式

从现在看来,学习设计模式是很久之前事了,刚开始时候对设计模式理解真的很浅,基本就是处于表面,不知道怎么在系统应用。...Form1,设置它ISMdiContainer属性为true,表示它是一个多文档界面MdI窗体容器。...然后建立button按钮,我们再创建一个窗体ChildForm,单击就创建一个窗体。...在没有使用单例模式时候,窗体会显示多个(如图1),但这并不是我们想要结果,我们想要图2显示,无论单击多少次,只显示一个窗体,此时我们就用到了单例模式。...所有的设计模式都是一样,既有优点也有缺点,我们利用它优点同时,不能忽略他缺点,在多线程程序,多个线程同时访问,会造成创建多个实例,存在不安全问题。

63610

【炫丽】从0开始做一个WPF+Blazor对话小程序

--新增Masa.Blazor Tab案例代码结束-->窗体操作按钮背景色也做部分修改:其实上面的窗体效果还是有点瑕疵,注意窗体右侧竖直滚动条了吗?...:点击主窗体A【+】按钮,发送了OpenSecondViewMessage消息,打开窗体B;打开窗体B后,再点击主窗体A【桃心】按钮,发送了SendRandomDataMessage消息,窗体...在RazorViews\MainView.razor执行按钮点击,发送打开窗体消息:......5.3.2 发送业务数据即第二个操作:打开窗体B后,再点击主窗体A【桃心】按钮,发送了SendRandomDataMessage消息,窗体B第二个TabItem Header显示了消息传来数字...:InvokeAsync:将Number赋值给变量tagCount代码是在InvokeAsync方法里执行,这个和WPF里Dispatcher.Invoke是一个意思,相当于接收数据是在线程,而赋值这个操作会即时绑定

8K60

【愚公系列】2023年11月 Winform控件专题 Form控件详解

添加窗体方式有两种,一种是在代码创建一个新窗体,另一种是在窗体设计器创建一个窗体控件。...当ShowInTaskbar属性为True时,窗体会显示在任务栏;当ShowInTaskbar属性为False时,窗体不会显示在任务栏。...这时可以将窗体ShowInTaskbar属性设置为False,这样子窗体不会出现在任务栏,用户也无法通过任务栏来切换窗体。...使用DoubleBuffered可以在控件绘制过程中使用一个缓冲区,当绘制完成时,将缓冲区内容一次性绘制屏幕上,以达到平滑绘制效果。...MDI应用程序:使用Form可以创建MDI窗体,作为多文档界面应用程序主窗口。模式窗口:Form可作为模式窗口使用,即在窗体弹出时阻止用户与其它窗体交互。

1.8K21

【炫丽】从0开始做一个WPF+Blazor对话小程序

--新增Masa.Blazor Tab案例代码结束--> 窗体操作按钮背景色也做部分修改: 样式部分修改 其实上面的窗体效果还是有点瑕疵,注意窗体右侧竖直滚动条了吗?...: 消息通知示例 图中有三个操作: 点击主窗体A【+】按钮,发送了OpenSecondViewMessage消息,打开窗体B; 打开窗体B后,再点击主窗体A【桃心】按钮,发送了SendRandomDataMessage...消息,窗体B第二个TabItem Header显示了消息传来数字; 点击窗体B【安卓】图标按钮,给主窗体A响应了消息ReceivedResponseMessage,主窗体收到后弹出一个对话框。...在RazorViews\MainView.razor执行按钮点击,发送打开窗体消息: ......5.3.2 发送业务数据 即第二个操作:打开窗体B后,再点击主窗体A【桃心】按钮,发送了SendRandomDataMessage消息,窗体B第二个TabItem Header显示了消息传来数字

10.2K20

使用C#开发数据库应用程序

,使用partial关键字可以将同一个类代码分开放在多个文件夹,每个文件都是类一部分代码。...b.什么是MDI 比如:在Microsoft Excel,我们可以同时打开多个Excel文档,而不需要新开一个Excel窗口,这种应用程序我们称为MDI(多文档界面); c.如何创建MDI (1...)创建MDI【设置父窗体:将父窗体IsMDIContainer属性设为true。...设置窗体:在调用打开窗体Show()方法前,在代码中将窗体MdiParent属性设为this】 例如: //用户单击菜单项时,出现创建学员用户窗口 private void tsmiNewStudent_Click...=this; addStudentForm.Show();//显示创建学员用户窗体 } (2)为父窗体添加窗体列表【在父窗体添加一个菜单Name(tsmiWindows),添加一个"窗口"菜单项

5.9K30

C#学习笔记——窗口停靠控件WeifenLuo.WinFormsUI.Docking使用

(5)一定要先设置Form1IsMdiContainer属性为True, 再放置一个dockPanel控件和Vs2015BlueThemeForm1上,设置dockPanel1Dock为Fill,...4.主窗体设置:(Mainwnd窗体默认是主窗体) Mainwnd窗体属性设置 在原有的Mainwnd窗体上设置窗体Text属性为主窗体,IsMdiContainer属性为true也就是设置为MDI...这几个属性意思应该不难,Dock就是 覆盖整个MDI窗体区域,DocumentStyle为多文档类型、RightToLeftLayout是指新打开窗口都停靠在右边区域。...DockManager.config"); private Form1 _form1 = new Form1(); private Form2 _form2 = new Form2(); 【4】添加2个菜单..._dockPanel.SaveAsXml(_dockpanelConfigFile); } 【7】注意 这种方式只能保存DockPanel界面布局,而主窗体尺寸、显示位置是无法保存时

5.8K50
领券