• WinForm 窗体初始位置篇


    在打开窗体软件时,我们常常需要该窗体有个默认的显示位置,如居中显示等等。QQ是大家熟悉的软件。在显示登录框的时候,是居中显示;登录后,好友列表框的显示位置是上次退出时的位置。 同时,细心的朋友有没有发现,QQ总是显示在其他窗体的前端,比方说我拖动360软件,移动到QQ位置时,QQ依旧显示在最前面。

    1.窗体居中显示。

      传统的居中显示需要计算出显示的长和宽,去掉窗体本身的大小,然后控制显示位置来达到窗体的居中显示,但是在C#中,From本身有个StartPosition属性可以控制居中显示。

     StartPosition 默认值是WindowsDefaultLocation ,我们只需要改成CenterScreen. 注意MSDN上的一句备注:             

       显示窗体之前,应设置此属性。 可在调用 Show 或 ShowDialog 方法之前或在窗体构造函数中设置此属性。 所以不要试图在Load事件中改变此属性,没用的。


    2.改变窗体的位置

      窗体的位置主要由Left(咱都是成年人,不用解释Left什么意思吧)属性和Top属性决定,(Width,Height)决定窗体的大小,对 Width 和 Left 属性值所做的更改导致该控件的 Right 属性值更改。其中Left 属性值等效于控件的 Location 属性值的 Point.X 属性。示例代码:

                this.Left = Convert.ToInt32( this.textBox1.Text);
    this.Top = Convert.ToInt32(this.textBox2.Text);
    //this.Location = new Point(Convert.ToInt32(this.textBox1.Text), Convert.ToInt32(this.textBox2.Text)); //等效上面两句

    3.窗体的位置由上次关闭时决定。

      其实也很简单,在From 的Closed 事件中,记录下当前窗体的Left值和Top值。然后在窗体加载时(Load事件)中,获取记录的值,再改变Left和Top属性,就实现了该功能。

    这里以记录到注册表为例:

            private void Form1_Load(object sender, EventArgs e)
    {
    RegistryKey reg = Registry.CurrentUser.CreateSubKey("SoftWare\\MySoft");
    int x = Convert.ToInt32(reg.GetValue("1"));
    int y = Convert.ToInt32(reg.GetValue("2"));
    this.Location = new Point(x, y);//可以转换成 Left 、Top 见 2.
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
    RegistryKey reg1 = Registry.CurrentUser;
    RegistryKey reg2 = reg1.CreateSubKey("SoftWare\\MySoft");
    reg2.SetValue("1", this.Location.X);
    reg2.SetValue("2", this.Location.Y);
    }


    4.总是显示在其他窗口的前面

      From类中有个TopMost属性,默认为Flase,设置为True时,就实现了该功能。当然你也可以试试自己写的窗体拖动到QQ前面时会发生什么?嘿嘿。

    遗留问题。我们上面所讲的都是正常的情况,当Left 属性与Width属性的和超过屏幕的宽度时,又会发生什么呢?读者自己试试吧~

    Demo

      

  • 相关阅读:
    5.19 省选模拟赛 T1 小B的棋盘 双指针 性质
    5.15 省选模拟赛 容斥 生成函数 dp
    5.15 省选模拟赛 T1 点分治 FFT
    5.15 牛客挑战赛40 B 小V的序列 关于随机均摊分析 二进制
    luogu P4929 【模板】舞蹈链 DLX
    CF 878E Numbers on the blackboard 并查集 离线 贪心
    5.10 省选模拟赛 拍卖 博弈 dp
    5.12 省选模拟赛 T2 贪心 dp 搜索 差分
    5.10 省选模拟赛 tree 树形dp 逆元
    luogu P6088 [JSOI2015]字符串树 可持久化trie 线段树合并 树链剖分 trie树
  • 原文地址:https://www.cnblogs.com/xinjian/p/2184306.html
Copyright © 2020-2023  润新知