首页 > 解决方案 > 使表单转到随机位置并保持在屏幕尺寸内 - Windows 表单

问题描述

嗨,我正在制作一个潜意识消息程序,其中我有一个出现然后很快消失的表单。

我现在正试图弄清楚如何制作它,以便每次弹出时,它都在一个随机的位置,但最重要的是我正在努力使它保持在某人屏幕尺寸的范围内。

我一直在努力寻找相关的代码,也看到了一些关于使用 Width 设置控件的信息,但我也无法找出控件的含义。

希望指出正确的方向

谢谢。

标签: winforms

解决方案


如果要以编程方式设置表单大小,请将表单的StartPosition属性设置为Manual.

您可以通过以下方式获取屏幕尺寸

Rectangle screen = Screen.PrimaryScreen.WorkingArea;

你还需要一个Random对象。确保只创建一次,例如将其设为静态和只读。

private static readonly Random _random = new Random();

现在您可以获得随机位置并打开表格

var frm = new MySubliminalForm();
int x = _random.Next(screen.Width - frm.Width);   // range [0 .. screen width - form width].
int y = _random.Next(screen.Height - frm.Height); // range [0 .. screen height - form height].
frm.Location = new Point(x, y);
frm.Show();

这显示屏幕(大矩形)和窗口(小矩形)处于最大位置。如您所见,窗口的 X 位置是屏幕宽度减去窗口宽度,Y 位置是屏幕高度减去窗口高度。

+------------------screen width------------+
|                           :              |
|                           :              |
|       screen              :              |
|                        y = Hscr - Hwin   |
|                           :              |
|                           V              |
| .....x = Wscr - Wwin ...> o-window width-+
|                           |              |
|                           |   window     |
|                           |              |
+---------------------------+--------------+

推荐阅读