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

MDI子窗体不会居中到同一parrent中的另一个MDI子窗体?

在MDI (Multiple Document Interface) 应用程序中,子窗体通常是以浮动的形式出现在主窗体中的。如果两个子窗体不居中到同一个父窗体中的另一个子窗体,可能是因为布局设置不正确或者缺少居中相关的代码。

要解决这个问题,可以尝试以下步骤:

  1. 确保所有子窗体都是MDI 子窗体:在每个子窗体的属性中,确保 IsMdiContainer 属性设置为 True
  2. 设置子窗体的布局方式:在每个子窗体的属性中,设置 WindowState 属性为 FormWindowState.Maximized,这将确保子窗体在加载时最大化显示。
  3. 在主窗体的加载事件中添加代码:在主窗体的 Load 事件处理程序中,添加以下代码,以确保子窗体居中显示:
代码语言:txt
复制
private void MainForm_Load(object sender, EventArgs e)
{
    foreach (Form childForm in this.MdiChildren)
    {
        childForm.StartPosition = FormStartPosition.CenterScreen;
    }
}

这将遍历所有的子窗体,并将它们的 StartPosition 属性设置为居中 (FormStartPosition.CenterScreen)。

  1. 确保所有子窗体都以MDI方式打开:在打开子窗体的代码中,使用以下语句以MDI方式打开子窗体:
代码语言:txt
复制
ChildForm childForm = new ChildForm();
childForm.MdiParent = this; // 设置父窗体为主窗体
childForm.Show();

以上步骤应该可以解决子窗体不居中到同一个父窗体中的另一个子窗体的问题。

MDI子窗体在实际开发中常用于多文档编辑器、图像处理应用等场景。如果您想深入了解云计算、IT互联网领域中的其他概念,您可以访问腾讯云的产品文档和帮助文档:

  1. 腾讯云云计算产品文档
  2. 腾讯云产品介绍
  3. 腾讯云云原生产品文档
  4. 腾讯云人工智能产品文档
  5. 腾讯云物联网产品文档
  6. 腾讯云存储产品文档
  7. 腾讯云区块链产品文档
  8. 腾讯云元宇宙产品文档

希望这些信息对您有所帮助!如果还有其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

保证相同类型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

1K10
  • CC++ Qt MdiArea 多窗体组件应用

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

    1.1K40

    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

    构建布局良好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.6K60

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

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

    9.7K20

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

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

    1.4K10

    VC获取窗体句柄各种方法

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

    1.2K20

    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.3K20

    项目中单例模式

    在开发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

    27920

    单件模式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; } 这样才不会出问题。

    1K20

    写字板(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

    1.1K10

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

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

    66110

    【炫丽】从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是一个意思,相当于接收数据是在线程,而赋值这个操作会即时绑定

    8.1K60

    【炫丽】从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.3K20

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

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

    2.3K21

    使用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界面布局,而主窗体尺寸、显示位置是无法保存时

    7K50
    领券