我这样做了,form1 将缓慢地向左移动.我怎样才能让它从屏幕中央开始

本文关键字:开始 屏幕 移动 form1 这样做 缓慢 左移 | 更新日期: 2023-09-27 18:33:16

在 Form1 的顶部,我做到了:

private IntPtr ID;
private int counter = 0;

在构造函数中,我做到了:

ID = this.Handle;
timer2.Enabled = true;

然后在 timer2 tick 事件中,我做到了:

private void timer2_Tick(object sender, EventArgs e)
        {
            if (counter <= Screen.PrimaryScreen.Bounds.Right)
                MoveWindow(ID, counter++, 0, this.Width, this.Height, true);
            else
                counter = 0;
        }

但是表单开始从左上角的 0,0 向右移动。我希望表单将开始从屏幕中心向左移动,直到它到达左边框/绑定并停止并停留在那里。

我该怎么做?

我现在找到了如何使其向左移动并停止在左边框/绑定:

private void timer2_Tick(object sender, EventArgs e)
        {
            if (counter >= Screen.PrimaryScreen.Bounds.Left)
                MoveWindow(ID, counter--, 0, this.Width, this.Height, true);
            else
                counter = 0;
        }

但是我如何让它开始从屏幕的中间/中心移动?我在设计器中更改了属性:StartPosition 到 CenterScreen但是表单开始从左上角移动 0,0<</p>

我这样做了,form1 将缓慢地向左移动.我怎样才能让它从屏幕中央开始

div class="answers">

有一个更好的解决方案,只需使用 protected 方法CenterToScreen()如下所示:

this.CenterToScreen();

这就是答案。

x = Screen.PrimaryScreen.Bounds.Bottom - this.Width * 2;
y = Screen.PrimaryScreen.Bounds.Bottom - this.Height * 2;
counter = x;

然后在计时器滴答事件中:

private void timer2_Tick(object sender, EventArgs e)
        {
            if (counter >= Screen.PrimaryScreen.Bounds.Left)
                MoveWindow(ID, counter--, y, this.Width, this.Height, true);
            else
                counter = 0;
        }

在它之前,计数器 -- 设置为 0。相反,y 也是 0。所以它是0,0这是位置。现在计数器和y开始位置是屏幕的中间。

谢谢。

您可以将主 WinForm 的 StartPosition 属性设置为 CenterScreen

 Form1.StartPosition = FormStartPosition.CenterScreen;

然后,如果您希望它以某种方式出现在相对于此屏幕中心的不同位置,则可以使用 TopLeft 属性来添加或减去所需的像素数。

如果您需要知道屏幕边界:

System.Windows.Forms.Screen.PrimaryScreen.Bounds

或者,考虑到任务栏:

System.Windows.Forms.Screen.PrimaryScreen.WorkingArea

。或某种变体