1

在 Form1 的顶部,我做了:

private IntPtr ID;
private int counter = 0;

在构造函数中我做了:

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

然后在 timer2 滴答事件中我做了:

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

4

3 回答 3

1

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

this.CenterToScreen();
于 2013-09-29T10:25:52.370 回答
0

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

 Form1.StartPosition = FormStartPosition.CenterScreen;

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

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

System.Windows.Forms.Screen.PrimaryScreen.Bounds

或者,考虑到任务栏:

System.Windows.Forms.Screen.PrimaryScreen.WorkingArea

...或一些变体

于 2013-09-29T10:56:21.037 回答
0

这就是答案。

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。相反,它也为 0。所以它是 0,0 这是位置。现在 counter 和 y 开始位置是屏幕的中间。

谢谢。

于 2013-09-29T09:24:02.703 回答