我这样做了,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>
有一个更好的解决方案,只需使用 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;
然后,如果您希望它以某种方式出现在相对于此屏幕中心的不同位置,则可以使用 Top
和 Left
属性来添加或减去所需的像素数。
如果您需要知道屏幕边界:
System.Windows.Forms.Screen.PrimaryScreen.Bounds
或者,考虑到任务栏:
System.Windows.Forms.Screen.PrimaryScreen.WorkingArea
。或某种变体