4

ウィンドウを表示せずに通知アイコン (システム トレイ) を直接開く必要がある .net Windows フォーム アプリケーションがあります。オンショーンのイベントか何かでこれができることに気づきました。しかし、そうすると、窓が一瞬光ります。どうすればそのフラッシュを回避できますか? Program.csファイルを次のように変更しようとしました。

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

MainForm frm = new MainForm();
frm.Visible = false;
Application.Run(frm);

Application.Run()ただし、フォームが表示されるため、これも機能しません。私が見逃している簡単な答えがあると確信しています。どんな助けでも大歓迎です。

4

5 に答える 5

4

Application.Run()パラメータを取り込まないため、アプリケーションの起動時にすぐにフォームを表示しないためのオーバーロードがあります。もちろん、監視する初期フォームまたは「メイン」フォームがないため、アプリケーションが終了する原因を自分で管理する必要があります。たとえば、それはあなたの通知アイコンであり、あなたが処理できると確信しています.

于 2010-06-05T00:54:41.953 に答える
3

アプリケーションの起動時にメイン フォームが必要ない場合は、 NotifyIcon のみを作成する方法を説明する記事へのリンクを次に示します。

于 2010-06-05T00:51:01.603 に答える
1

ShowInTaskbar を false に設定するとともに、frm の WindowState を Minimized に設定してみてください。また、私は専門家ではありませんが、MainForm コンストラクターで可視性ロジックを処理する必要があると思います。

于 2010-06-05T00:47:33.497 に答える
0

これは、まさにそれを行うフォームの初期化メソッドのコード スニペットです。アプリはトレイで実行され、ユーザーが通知アイコンをダブルクリックするとウィンドウが表示されます。サイズ変更などを処理するメソッドがあり、メニューオプションを介してのみフォームが閉じられるようにします。

public MainForm()
{
  ...code
  Resize += MainForm_Resize;
  notifyIcon.DoubleClick += NotifyIconDoubleClick;
  WindowState = FormWindowState.Minimized;
  Hide();
}
private void MainForm_Resize(object sender, EventArgs e)
{
  if (FormWindowState.Minimized == WindowState)
     Hide();
}

private void NotifyIconDoubleClick(object sender, EventArgs e)
{
   Show();
   try
   {
      WindowState = FormWindowState.Normal;
      ...more code for other stuff
    }catch(yadda yadda)
      ...code
    }
 }
于 2010-06-05T00:57:44.660 に答える
0

少しハックかもしれませんが、ボーダレス フォーム ( FormBorderStyle.None) を作成し、それを に設定しTransparencyKeyBackColor無効ShowInTaskbarにしてから、そのフォームを Application.Run() に渡すことができます。ほら。:)

于 2010-06-05T01:09:05.367 に答える