C# winform窗口打开特效及窗口位置居中

在启动一个程序时,我们希望窗口显示的位置处于屏幕的正中心,可以如下设置:
 MainForm mainForm = new MainForm();
 mainForm.StartPosition = FormStartPosition.CenterScreen;
 mainForm.Show();
如果在允许操作主窗口之前,必须先登录,则弹出登录窗口。此时主窗口出现在登录窗口后面,无法进行操作。
 MainForm mainForm = new MainForm();
 LoginForm dlg=new LoginForm();
 dlg.ShowDialog();
这里ShowDialog方法表示你必须先操作完dlg窗口,才能操作后面的主窗体。
如果要登录窗口显示在主窗口的中心,则在显示之前设置如下
 dlg.StartPosition = FormStartPosition.CenterParent;
 dlg.ShowDialog();
能够这样做的前提是主窗体必须先定义和显示。否则登录窗体可能无法找到父窗体。
除此之外,也可以手动设置窗口显示的位置,即窗口坐标。
首先必须把窗体的显示位置设置为手动。
dlg.StartPosition=FormStartPosition.Manual;
随后获取屏幕的分辨率,也就是显示器屏幕的大小。
 int xWidth = SystemInformation.PrimaryMonitorSize.Width;//获取显示器屏幕宽度
 int yHeight = SystemInformation.PrimaryMonitorSize.Height;//高度
然后定义窗口位置,以主窗体为例
 mainForm.Location = new Point(xWidth/2, yHeight/2);//这里需要再减去窗体本身的宽度和高度的一半
 mainForm.Show();
这样三步之后,一个准确定位在屏幕位置上的窗体就显示出来了。
用Point类时,必须先把它包含进来,在程序最前面写上:
 using System.Drawing;
通过上面的一些简单介绍,您应该明白在C#中怎样设置窗体位置了吧

 

出处:http://blog.csdn.net/qshpeng/article/details/1672359

=======================================================================================

再看另外一个设置窗口打开的特效已经居中的方法,大家可以参考使用。

 using System.Runtime.InteropServices;
 public class Win32
 {
  public const Int32 AW_HOR_POSITIVE = 0x00000001; // 从左到右打开窗口
  public const Int32 AW_HOR_NEGATIVE = 0x00000002; // 从右到左打开窗口
  public const Int32 AW_VER_POSITIVE = 0x00000004; // 从上到下打开窗口
  public const Int32 AW_VER_NEGATIVE = 0x00000008; // 从下到上打开窗口
  public const Int32 AW_CENTER = 0x00000010; //若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。
  public const Int32 AW_HIDE = 0x00010000; //隐藏窗口,缺省则显示窗口。
  public const Int32 AW_ACTIVATE = 0x00020000; //激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
  public const Int32 AW_SLIDE = 0x00040000; //使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
  public const Int32 AW_BLEND = 0x00080000; //使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
  [DllImport("user32.dll", CharSet = CharSet.Auto)]
  public static extern bool AnimateWindow(
    IntPtr hwnd, // handle to window
    int dwTime, // duration of animation
    int dwFlags // animation type
    );
 }
 /**//*淡入窗体*/
 private void Form_Load(object sender, EventArgs e)
 {
  Win32.AnimateWindow(this.Handle, 2000, Win32.AW_BLEND);
 }
 /**//*淡出窗体*/
 private void Form_FormClosing(object sender, FormClosingEventArgs e)
 {
  Win32.AnimateWindow(this.Handle, 2000, Win32.AW_SLIDE | Win32.AW_HIDE | Win32.AW_BLEND);
 }
2,窗体居中 
Code 
 
      /**//// <summary>
        /// 页面居中
        /// </summary>
        public static void SetMid(Form form)
        {
            // Center the Form on the user's screen everytime it requires a Layout.
            form.SetBounds((Screen.GetBounds(form).Width / 2) - (form.Width / 2),
                (Screen.GetBounds(form).Height / 2) - (form.Height / 2),
                form.Width, form.Height, BoundsSpecified.Location);
        }

这里是一个静态方法,参数为你需要设置居中的窗口对象。你可以在该窗口加载的时候加载这个静态方法实现你要的效果!

 

出处:http://blog.csdn.net/lwmjm/article/details/8085752

 

=======================================================================================

【WinForm】Form设置窗体居中显示

Form设置窗体居中显示

设置第一次出现的位置StartPosition为CenterScreen
在这里插入图片描述

当运行时
当新实例化的窗体或被最小化的窗体,设置居中显示

方法

/// <summary>
/// 扩展方法
/// </summary>
public static class Extensions
{
	/// <summary>
	/// Form设置窗体居中显示
	/// </summary>
	public static void CenterScreen(this Form frm)
	{
	    //激活窗体
	    frm.Activate();
	    //如果窗体是最小化状态,则设置为正常状态
	    if (frm.WindowState == FormWindowState.Minimized) frm.WindowState = FormWindowState.Normal;
	    //设置窗体位置居中
	    frm.Location = new Point((SystemInformation.PrimaryMonitorSize.Width - frm.Width) / 2, 
	        (SystemInformation.PrimaryMonitorSize.Height - frm.Height) / 2);
	}
}

调用

frm.CenterScreen();

=======================================================================================

Winform通用窗体屏幕居中或父窗体居中

一、实现效果

①窗体居于屏幕中间

②子窗体居于父窗体中间

二、核心代码

/***
*    Title:"三维可视化" 项目
*        主题:【视图层】窗体基础操作
*    Description:
*        功能:
*            1、实现窗体基于屏幕居中
*            2、实现窗体居于父窗体中间
*    Date:2020
*    Version:1.0版本
*    Author:Coffee
*    Modify Recoder:
*/
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace View
{
    class FormBaseOPC
    {
        /// <summary>
        /// 1-窗体屏幕居中
        /// </summary>
        /// <param name="form">需要居中的窗体</param>
        public static void SetScreenMiddle2(Form form)
        {
            if (form!=null)
            {
                //获取屏幕设置居中效果
                form.SetBounds((Screen.GetBounds(form).Width / 2) - (form.Width / 2),
                    (Screen.GetBounds(form).Height / 2) - (form.Height / 2),
                    form.Width, form.Height, BoundsSpecified.Location);
            }
        }
 
        /// <summary>
        /// 1-窗体屏幕居中(系统自带)
        /// </summary>
        /// <param name="form">需要居中的窗体</param>
        public static void SetScreenMiddle(Form form)
        {
            if (form!=null)
            {
                form.StartPosition = FormStartPosition.CenterScreen;
            }
        }
 
        /// <summary>
        /// 2-设置相对于窗体居中且打开
        /// </summary>
        /// <param name="form">需要居中的窗体</param>
        public static void SetFormMiddle(Form form)
        {
            if (form!=null)
            {
                //设置窗体相对于父窗体居中
                form.StartPosition = FormStartPosition.CenterParent;
                //显示窗体
                form.ShowDialog();
                //设置焦点为当前窗体
                form.Focus();
            } 
        }
 
    }//Class_end
}

 

三、使用方法

①首先使用命名空间

using View;

 

②使用示例:实现窗体居于屏幕中间

public partial class Form1 : Form
{
    public Form1()
     {
        InitializeComponent();
        //设置窗体屏幕居中
        FormBaseOPC.SetScreenMiddle(this);
     }
}

 

③使用示例:实现子窗体居于父窗体中间 

//设置相对于父窗体居中且打开(这个方法用在父窗体中)
FormBaseOPC.SetFormMiddle(子窗体的名称); 
//比如我要在当前父窗体的按钮下面实现点击按钮打开子窗体【子窗体名为:form_IPSettings】(且该子窗体居于该父窗体的中间)则在该按钮方法内容添加如下方法即可
FormBaseOPC.SetFormMiddle(form_IPSettings);

 

 

出处:https://www.freesion.com/article/2105696636/

=======================================================================================

C# WinForm 窗口居中

/// <summary>
/// 屏幕大小
/// </summary>
int ScreenH, ScreenW;
public Form1()
{
    InitializeComponent();
    
     //缓存 屏幕分辨率
    ScreenH = System.Windows.Forms.SystemInformation.WorkingArea.Height;
    ScreenW = System.Windows.Forms.SystemInformation.WorkingArea.Width;

    //软件一启动,窗口就居中【后续,如果有改变窗口,不会再次居中】
    this.StartPosition = FormStartPosition.CenterScreen;
}


///手动窗体居中
private void button1_Click(object sender, EventArgs e)
{
    
    //窗体居中
    int formheight = this.Size.Height;
    int formwidth = this.Size.Width;
    int newformx = ScreenW / 2 - formwidth / 2;
    int newformy = ScreenH / 2 - formheight / 2;
    this.SetDesktopLocation(newformx, newformy);

}

 

出处:https://blog.csdn.net/DxgTeam/article/details/112345013

=======================================================================================

Winform窗口的淡入淡出特效及窗口位置居中功能

一、设置窗体淡入淡出效果

1.1、窗体淡入淡出效果核心脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/***
*   Title:"三维可视化" 项目
*       主题:【视图层】窗体淡入弹出
*   Description:
*       功能:实现窗体的淡入淡出效果
*   Date:2020
*   Version:1.0版本
*   Author:Coffee
*   Modify Recoder:
*/

using System;
using System.Runtime.InteropServices;

namespace View
{
    //窗体的淡入淡出效果
    class FormFadeInorout
    {
        public const Int32 AW_HOR_POSITIVE = 0x00000001; // 从左到右打开窗口
        public const Int32 AW_HOR_NEGATIVE = 0x00000002; // 从右到左打开窗口
        public const Int32 AW_VER_POSITIVE = 0x00000004; // 从上到下打开窗口
        public const Int32 AW_VER_NEGATIVE = 0x00000008; // 从下到上打开窗口
        public const Int32 AW_CENTER = 0x00000010; //若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。
        public const Int32 AW_HIDE = 0x00010000; //隐藏窗口,缺省则显示窗口。
        public const Int32 AW_ACTIVATE = 0x00020000; //激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
        public const Int32 AW_SLIDE = 0x00040000; //使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
        public const Int32 AW_BLEND = 0x00080000; //使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern bool AnimateWindow
         (
            IntPtr hwnd, // 窗口句柄
            int dwTime, // 淡入淡出持续时间(单位:毫秒)
            int dwFlags // 淡入淡出特效类型
          );


    }//Class_end
}

 

 

1.2、窗体淡入淡出效果使用方法

注意:窗体淡入淡出的持续时间可以自行修改

①在窗体加载时使用窗体淡入效果:

1
2
3
4
5
 private void Form1_Load(object sender, EventArgs e)
        {
            //淡入窗体
            FormFadeInorout.AnimateWindow(this.Handle, 500, FormFadeInorout.AW_BLEND);
        }

 

 

②在关闭窗体是使用窗体淡出效果

1
2
3
4
5
 private void Form_FormClosing(object sender, FormClosingEventArgs e)
        {
            //淡出窗体
            FormFadeInorout.AnimateWindow(this.Handle, 360, FormFadeInorout.AW_SLIDE | FormFadeInorout.AW_HIDE | FormFadeInorout.AW_BLEND);
        }

二、Winform窗体的居中功能

2.1、Winform窗体根据显示的屏幕居中

①使用系统自带的居中方法:

1
需要居中的窗体名称.StartPosition = FormStartPosition.CenterScreen;

 

 

②获取屏幕长和宽然后除以2计算设置

1
2
int xWidth = SystemInformation.PrimaryMonitorSize.Width;//获取显示器屏幕宽度
int yHeight = SystemInformation.PrimaryMonitorSize.Height;//高度

2.2、Winform窗体居于父窗体的中间

1
2
3
4
//设置窗体相对于父窗体居中
需要居中的窗体名称.StartPosition = FormStartPosition.CenterParent;
//显示窗体
需要居中的窗体名称.ShowDialog();

2.3、实现窗体居中的核心脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/***
*   Title:"三维可视化" 项目
*       主题:【视图层】窗体基础操作
*   Description:
*       功能:
*           1、实现窗体基于屏幕居中
*           2、实现窗体居于父窗体中间
*   Date:2020
*   Version:1.0版本
*   Author:Coffee
*   Modify Recoder:
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace View
{
    class FormBaseOPC
    {
        /// <summary>
        /// 1-窗体屏幕居中
        /// </summary>
        /// <param name="form">需要居中的窗体</param>
        public static void SetScreenMiddle2(Form form)
        {
            if (form!=null)
            {
                //获取屏幕设置居中效果
                form.SetBounds((Screen.GetBounds(form).Width / 2) - (form.Width / 2),
                    (Screen.GetBounds(form).Height / 2) - (form.Height / 2),
                    form.Width, form.Height, BoundsSpecified.Location);
            }
        }

        /// <summary>
        /// 1-窗体屏幕居中(系统自带)
        /// </summary>
        /// <param name="form">需要居中的窗体</param>
        public static void SetScreenMiddle(Form form)
        {
            if (form!=null)
            {
                form.StartPosition = FormStartPosition.CenterScreen;
            }
        }

        /// <summary>
        /// 2-设置相对于窗体居中且打开
        /// </summary>
        /// <param name="form">需要居中的窗体</param>
        public static void SetFormMiddle(Form form)
        {
            if (form!=null)
            {
                //设置窗体相对于父窗体居中
                form.StartPosition = FormStartPosition.CenterParent;
                //显示窗体
                form.ShowDialog();
                //设置焦点为当前窗体
                form.Focus();
            }
        }

    }//Class_end
}

2.4、使用方法

①在窗体初始化时:调用窗体基于屏幕居中的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
       public Form1()
        {
            InitializeComponent();
            //设置窗体屏幕居中
            FormBaseOPC.SetScreenMiddle(this);
        }

       public Form1()
        {
            InitializeComponent();
            //设置窗体屏幕居中
            FormBaseOPC.SetScreenMiddle2(this);
        }

②在按钮触发需要打开子窗体时候:调用实现窗体居于父窗体中间方法

1
2
3
4
5
6
7
8
9
10
       //打开设置窗体按钮
        private void Btn_Settings_Click(object sender, EventArgs e)
        {
            if (form_IPSettings==null || form_IPSettings.IsDisposed)
            {
                form_IPSettings = new Form_IPSettings();
            }
            //设置相对于窗体居中且打开
            FormBaseOPC.SetFormMiddle(form_IPSettings);
        }

 

 

注意:淡入淡出特效参考:C# winform自动居中,及特效

 

出处:https://www.codenong.com/cs106043774/

posted on 2017-02-20 22:41  jack_Meng  阅读(68728)  评论(0编辑  收藏  举报

导航