我正在刚刚创建但未显示的表单上调用System.Windows.Forms ... SetDesktopBounds(x,y,width,height)。当我显示表单时,它不会进入我的SetDesktopBounds点,而是出现在其他地方。
如果我显示表单,然后是SetDesktopBounds,则隐藏它... 将在我下次显示时就在现场。谁知道这里发生了什么?我不想事先做一个节目,因为在我设置它时你会得到一个闪烁的形式。
在调用SetDesktopBounds之前调用Activate和/或CreateControl也不起作用。
谢谢!
答案 0 :(得分:3)
如果您在表单的Load事件触发之前调用它,您将无法获得满意的结果。直到那时才知道窗口的实际大小,用户首选项和重新缩放将在创建本机窗口时生效。如果在加载后执行此操作,则可以看到重新定位。所以这是最好的:
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var main = new Form1();
main.Load += delegate { main.SetDesktopBounds(100, 100, 300, 300); };
Application.Run(main);
}
答案 1 :(得分:0)
这是因为默认情况下,表单是使用StartPosition = FormStartPosition.WindowsDefaultLocation初始化的。将其更改为FormStartPosition.Manual,并且在加载表单后不需要任何回调,它会立即忽略所有由操作系统强制执行的定位,并调用SetDesktopBounds即可满足您的要求。