1

我有一个(我认为是)非常简单的问题,但我正在为此烦恼:

在我的主类中,在 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();

这是尝试使用背景图像制作无边框窗口。我运行代码并且没有错误 - 但没有出现任何形式。

我究竟做错了什么?

4

2 回答 2

6

您的代码不起作用,因为您尚未启动事件循环以保持进程运行。让你的代码工作就像改变一样简单

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。将窗口发送到此命令可确保在您关闭表单时自动运行 exit,这样您就不会意外地让进程在后台运行。无需运行表单显示方法,因为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。您应该没有理由更改它,因为您显然是在进行新的开发。

于 2012-08-01T02:59:12.400 回答
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矩形实际上在屏幕尺寸内。

于 2012-08-01T02:24:35.377 回答