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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 39485|回复: 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)
效果如下

再提供一个布局的其实属性
StartPosition属性有如下选项,分别含义如下:
  CenterParent                     窗体在其父窗体中居中。   
  CenterScreen                     窗体在当前显示窗口中居中,其尺寸在窗体大小中指定。   
  Manual                           窗体的位置由   Location   属性确定。   
  WindowsDefaultBounds     窗体定位在   Windows   默认位置,其边界也由   Windows   默认决定。   
  WindowsDefaultLocation    窗体定位在   Windows   默认位置,其尺寸在窗体大小中指定。     
   
   CenterScreen的意思并不是屏幕居中(是相对的),它是在"当前显示窗口"中居中。


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这个窗体在容器里居中。

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


5
发表于 2014-11-10 17:35:30 | 只看该作者
受教了,学习中……
6
发表于 2015-4-8 14:57:45 | 只看该作者
回复

使用道具 举报

7
发表于 2018-4-26 10:40:40 | 只看该作者
f.MdiParent = this;
这句代码 报错 什么鬼。。
System.ArgumentException:“被指定为此窗体的 MdiParent 的窗体不是 MdiContainer。  

8
 楼主| 发表于 2018-4-26 13:40:04 | 只看该作者
被指定为此窗体的 MdiParent 的窗体不是 MdiContainer
这不是说的很明白吗。要放子窗体,得设置为MdiContainer
9
 楼主| 发表于 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-12-19 05:04

© 2014-2021

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