C#设置子窗体在主窗体中居中显示解决方案

问题的开始是由C#传传看主群里的印醒提出来的,下面我来说一下解决方案吧
其实表面上看是很简单的
开始吧,现在有两个窗体Form1主窗体,Form2子窗体
而且我相信大部分人都会这样写

在子窗体的Load事件中
这样写


代码如下:

this.StartPosition = FormStartPosition.CenterParent;

其实这样写是不对的,正确的写法应该是


代码如下:

this.StartPosition = FormStartPosition.CenterScreen;

为什么是CenterScreen而不是CenterParent呢?
那是因为我们调用的方法的问题,如果你在调用子窗体时是这样写的话


代码如下:

Form2 f2 = new Form2();
f2.MdiParent= this;
f2.Show();

那就得使用CenterScreen而不是CenterParent了,因为在Show的时候窗体是Owner页不是Parent
只要使用ShowDialog()方法时使用CenterParent才有效
大家会说这样就行了吗?其实也不行,我们的代码不应该写在Load事件中,而是在Show方法之前写。
正确的写法应该是这样的


代码如下:

Form2 f2 = new Form2();
f2.MdiParent= this;
f2.StartPosition = FormStartPosition.CenterScreen;
f2.Show();

在子窗体中你什么也不需要做

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

(0)

相关推荐

  • C#最简单的关闭子窗体更新父窗体的实现方法

    主窗体Form1关键代码: 将子窗体最为对话框模式弹出,当窗体关闭或取消时更新主窗体 复制代码 代码如下: private void simpleButton1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Owner = this; DialogResult result=f2.ShowDialog(); if (result == DialogResult.Cancel) { this.gridControl1.

  • C#实现让窗体永远在窗体最前面显示的实例

    本文以实例描述了C#实现让窗体永远在窗体最前面显示的方法,具体步骤如下: 1.新建一个窗体程序,添加一个Timer以及设置它可用并绑定事件. 2.设置窗体的TopMost属性为True 3.然后设置代码如下即可实现. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; usin

  • C#,winform,ShowDialog,子窗体向父窗体传值

    调用showdialog方法后,调用代码被暂停执行,等到调用showdialog方法的窗体关系后再继续执行.而且窗体可以返回一个dialogresult值,他描述了窗体关闭的原因,例如OK,Cancel,yes,no等.为了让窗体返回一个dialogresult,必须设置窗体的dialogresult值,或者在窗体的一个按钮上设置dialogresult属性. 例子: 下面是子窗体代码,要求输入phone,然后会返回给父窗体. using System; using System.Collect

  • C# SkinEngine控件 给窗体添加皮肤的方法

    自己写的一个日历记事本效果图 具体步骤: 1.添加控件SkinEngine.  1.右键"工具箱"."添加选项卡",取名"皮肤".   2.右键"皮肤","选择项"弹出对话框.  3.点击"浏览",找到IrisSkin2.dll,这时你会发现 SkinEngine 的控件已经被打上勾 - 确定.2.将 SkinEngine 控件添加到窗体上.3.把皮肤文件(以ssk为后缀名)放在&quo

  • C# 开发圆角控件(窗体)的具体实现

    最近在做卡片视图的程序,要求将控件做成带有圆角的效果,下面是我在网上查找的资料,经过测试,确定可以实现功能.其中方法三既适应于控件,也适应于窗体. 先上传效果图: 方法一: 增加命名空间:using System.Drawing.Drawing2D;  添加方法如下:当然各角的点可根据需要确定. 复制代码 代码如下: private void Type(Control sender, int p_1, double p_2)        {            GraphicsPath oP

  • C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法

    本文实例讲述了C# Winform实现捕获窗体最小化.最大化.关闭按钮事件的方法,主要是通过重写WndProc来实现的.分享给大家供大家参考.具体方法如下: 主要功能代码如下: const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE = 0xF020; const int SC_MAXIMIZE = 0xF030; protected override void WndProc(ref

  • c# winform 关闭窗体时同时结束线程实现思路

    前不久,做一个winform小程序,是给客户导数据用的.当时就发现调试的时候,线程有点问题,到某个点时就走不动了.但是运行确实没有问题的. 只是在关闭窗体后,资源管理器里,一大堆进程. 当时,客户急着用,小测了下,导出数据无误,进程就先不管了. 后来自己去查资料,发现只要在线程那里设置个属性 复制代码 代码如下: Thread th = new Thread(Excute); th.IsBackground = true;这样就解决问题了. 这个属性的意思就是把线程设置为后台线程. 然后关闭进程

  • 用 C# Winform做出全透明的磨砂玻璃窗体效果代码

    首先, 调用系统 API, 这里如果要引用神马的, 就不一一列出了, 大家自己引用一下. 复制代码 代码如下: [StructLayout(LayoutKind.Sequential)] public struct MARGINS { public int Left; public int Right; public int Top; public int Bottom; } [DllImport("dwmapi.dll", PreserveSig = false)] public s

  • C#窗体编程不显示最小化、最大化、关闭按钮的方法

    本文介绍在C#窗体编程时,如何设置不显示右上角的最小化最大化关闭按钮.可以通过this.ControlBox这个属性的值来控制. 在Windows的窗体编程中,基本上每一个窗体都是一个最小化.最大化和关闭按钮的.见惯了千篇一律,我们有时需要有一点新意,比如来把右上角的这最小化.最大化和关闭三个按钮去掉. 对于最大化和最小化按钮,在C#窗体开发时,各一个属性来启用或禁用这两个按钮.对于最大化来说,this.MaximizeBox=false即可禁用最大化按钮.而这里的this是指窗体对象本身.而t

  • C# WINFORM 强制让窗体获得焦点的方法代码

    复制代码 代码如下: //调用API [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, ExactSpelling = true)] public static extern IntPtr GetForegroundWindow(); //获得本窗体的句柄 [System.Runtime.InteropService

  • 解决C#中取消方向键对控件焦点控制的实现方法

    在C# winform 应用程序中,对于键盘响应事件,经常使用到"KeyPress"."KeyUp"."KeyDown"事件,可以处理某个按键的自定义处理事件.有时想定义方向键的自定义处理事件时,你可以发现,虽然自定义的处理事件发生了响应,但是也可以看到,按下方向键时,发现窗体上控件的焦点也发生了切换.而这种结果不是我们想要的,我们不想按下方向键时,控件的焦点发生切换,只想响应我们自定义的处理函数即可.下面的方法可以取消方向键对控件焦点的控制:

  • C#实现让窗体获得焦点的方法示例

    本文实例讲述了C#实现让窗体获得焦点的方法.分享给大家供大家参考,具体如下: 开发环境:Visual Studio .NET 2005 下的Windows Form Application 应用场景:当我们有个窗体中的数据发生了变化而此窗体又没有获得焦点(不是用户操作的当前窗口)的时候,我们希望它获得焦点,这样用户就可以立刻发现它上面的数据发生了变化. 新建一个Window应用程序,会建立Form1,再添加一个Timer(timer1),设置如下属性: 然后添加timer1的Tick事件函数,完

随机推荐