http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 38943|回复: 8

[Winform] C#怎么设置子窗体在主窗体中居中显示

[复制链接]
发表于 2012-11-28 16:01:50 | 显示全部楼层 |阅读模式
                            C#怎么设置子窗体在主窗体中居中显示
问题的开始是由C#传传看主群里的印醒提出来的,下面我来说一下解决方案吧
其实表面上看是很简单的
开始吧,现在有两个窗体Form1主窗体,Form2子窗体
而且我相信大部分人都会这样写
在子窗体的Load事件中
这样写
[code=csharp] this.StartPosition = FormStartPosition.CenterParent;[/code]
其实这样写是不对的,正确的写法应该是
[code=csharp] this.StartPosition = FormStartPosition.CenterScreen;[/code]
为什么是CenterScreen而不是CenterParent呢?
那是因为我们调用的方法的问题,如果你在调用子窗体时是这样写的话
[code=csharp] Form2 f2 = new Form2();
            f2.MdiParent  = this;
            f2.Show();[/code]
那就得使用CenterScreen而不是CenterParent了,因为在Show的时候窗体是Owner页不是Parent
只要使用ShowDialog()方法时使用CenterParent才有效
大家会说这样就行了吗?其实也不行,我们的代码不应该写在Load事件中,而是在Show方法之前写。
正确的写法应该是这样的
[code=csharp] Form2 f2 = new Form2();
            f2.MdiParent  = this;
            f2.StartPosition = FormStartPosition.CenterScreen;
            f2.Show();[/code]
而在子窗体中你什么也不需要做
下面是我提供的一个例子,是源代码,大家如果还是感觉不太清楚的话可以下载例子看一下
WindowsFormsApplication1.rar (40.63 KB, 下载次数: 319)


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-7-14 23:14:54 | 显示全部楼层
受教了,学习中……
发表于 2013-7-24 20:37:03 | 显示全部楼层
但是“因为在Show的时候窗体是Owner页不是Parent”, 这该怎么理解,
他不是指定Form2的父窗体是Form1了么,而且Owner页不理解啊!
 楼主| 发表于 2013-7-25 07:43:20 | 显示全部楼层
ヤ①个亼简单 发表于 2013-7-24 20:37
但是“因为在Show的时候窗体是Owner页不是Parent”, 这该怎么理解,
他不是指定Form2的父窗体是Form1了么 ...

一个简单的问题你不要想的太复杂了,
这和Owner页有什么关系呢,
f2.StartPosition = FormStartPosition.CenterScreen
只是设置f2这个窗体在容器里居中。

你这样理解,我只是设置一个 控件的属性是居中显示,他放在什么容器里就会在什么容器里居中。不用管他会变成什么页不页的。


发表于 2014-11-10 17:35:30 | 显示全部楼层
受教了,学习中……
发表于 2015-4-8 14:57:45 | 显示全部楼层
回复

使用道具 举报

发表于 2018-4-26 10:40:40 | 显示全部楼层
f.MdiParent = this;
这句代码 报错 什么鬼。。
System.ArgumentException:“被指定为此窗体的 MdiParent 的窗体不是 MdiContainer。  

 楼主| 发表于 2018-4-26 13:40:04 | 显示全部楼层
被指定为此窗体的 MdiParent 的窗体不是 MdiContainer
这不是说的很明白吗。要放子窗体,得设置为MdiContainer
 楼主| 发表于 2018-4-26 13:40:11 | 显示全部楼层
小哲 发表于 2018-4-26 10:40
f.MdiParent = this;
这句代码 报错 什么鬼。。
System.ArgumentException:“被指定为此窗体的 MdiParent ...


被指定为此窗体的 MdiParent 的窗体不是 MdiContainer
这不是说的很明白吗。要放子窗体,得设置为MdiContainer
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-15 22:29

© 2014-2021

快速回复 返回顶部 返回列表