我有一个(我认为是)非常简单的问题,但是我把头发撕成了我的头发:
在我的主类中,在main方法中,我有以下代码:
Form window = new Form();
window.FormBorderStyle = FormBorderStyle.None;
window.BackgroundImage = blurred; //blurred is a Bitmap
window.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height); //bounds is a Rectangle
window.Show();
这是尝试使用背景图像制作无边框窗口。我运行代码并且没有错误 - 但是没有表单出现。
我做错了什么?
答案 0 :(得分:5)
您的代码无效,因为您尚未启动事件循环以保持进程运行。让代码工作就像改变
一样简单Form window = new Form();
window.FormBorderStyle = FormBorderStyle.None;
window.BackgroundImage = blurred; //blurred is a Bitmap
window.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height); //bounds is a Rectangle
window.Show();
到
Form window = new Form();
window.FormBorderStyle = FormBorderStyle.None;
window.BackgroundImage = blurred; //blurred is a Bitmap
window.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height); //bounds is a Rectangle
Application.Run(window);
添加 Application.Run 会启动一个消息处理循环,以便您的应用程序正在等待事件处理,直到您运行 Application.Exit 。将窗口发送到此命令可确保在关闭表单时自动运行退出,这样您就不会意外地让进程在后台运行。无需运行表单show方法,因为 Application.Run 会自动显示它。
那说我仍然建议使用类似于LarsTech发布的方法,因为它解决了一些额外的问题。
[STAThread]
static void main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form window = new Form();
window.StartPosition = FormStartPosition.Manual;
window.FormBorderStyle = FormBorderStyle.None;
window.BackgroundImage = blurred; //blurred is a Bitmap
window.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height);
Application.Run(window);
}
[STAThread]将表单的线程模型限制在单个线程中。这有助于防止一些可能破坏您的表单的边缘案例线程问题。
Application.EnableVisualStyles 告诉您的应用程序默认使用您操作系统级别使用的样式。
自Visual Studio 2005以来,Application.SetCompatibleTextRenderingDefault 在新表单项目中默认为false。您应该没有理由更改它,因为您显然正在进行新的开发。
答案 1 :(得分:2)
确保您正在运行消息泵。
类似的东西:
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form window = new Form();
window.StartPosition = FormStartPosition.Manual;
window.FormBorderStyle = FormBorderStyle.None;
window.BackgroundImage = blurred;
window.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height);
Application.Run(window);
}
另一件事是确保您的bounds
矩形实际上在屏幕尺寸范围内。