1

私は(私が思うに)非常に単純な問題を抱えていますが、私は髪を引き裂いています:

私のメインクラスのメインメソッドには、次のコードがあります。

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を使用すると、フォームのshowメソッドが自動的に表示されるため、フォームのshowメソッドを実行する必要はありません。

それでも、いくつかの追加の問題を解決するので、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は、OSレベルで使用されるスタイルをデフォルトにするようにアプリケーションに指示します。

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);
}

確認するもう1つのことは、bounds長方形が実際に画面の寸法内にあることです。

于 2012-08-01T02:24:35.377 に答える