Winforms 使窗体转到随机位置并保持在屏幕大小内-Windows窗体

Winforms 使窗体转到随机位置并保持在屏幕大小内-Windows窗体,winforms,Winforms,嗨,我正在制作一个潜意识信息程序,在那里我有一个表格,它会很快出现然后消失 我现在正试图弄清楚如何使它每次弹出时都处于随机位置,但最重要的是,我正在努力使它保持在某人屏幕大小的范围内 我一直在努力寻找相关的代码,也看到了一些关于使用宽度来设置控件的内容,但我也无法找到控件的含义 希望被指向正确的方向 谢谢。如果要以编程方式设置表单大小,请将表单的StartPosition属性设置为Manual 您可以使用 Rectangle screen = Screen.PrimaryScreen.Worki

嗨,我正在制作一个潜意识信息程序,在那里我有一个表格,它会很快出现然后消失

我现在正试图弄清楚如何使它每次弹出时都处于随机位置,但最重要的是,我正在努力使它保持在某人屏幕大小的范围内

我一直在努力寻找相关的代码,也看到了一些关于使用宽度来设置控件的内容,但我也无法找到控件的含义

希望被指向正确的方向


谢谢。

如果要以编程方式设置表单大小,请将表单的
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     |
|                           |              |
+---------------------------+--------------+

只需将随机结果限制在某些(屏幕尺寸)向量上。感谢工作得很好,我不完全理解如何将screen.width从frm.width中移除以防止其脱离屏幕。我在游戏设计中也看到过类似的例子,但当时我无法理解。如果你有机会,你能给我指出正确的方向,让我知道它是如何工作的吗?很简单:窗户的位置是它的左上角。窗口的右下角等于其位置加上其大小。由于您不希望右下角脱离屏幕,请从屏幕大小中减去窗口大小,以获得最大可能的窗口位置。起初我没有得到解释,但后来再次查看了什么是随机的。接下来,感谢您的解释,它现在有意义了。
\u random.next(N)
0.范围内产生一个
int
。。N-1