1

私は C# に非常に慣れていません。これは、C# に関する 3 番目の質問です。

システムトレイに最小化できるアプリを作っています。と という名前の 2 つのフォームがForm1ありForm2ます。私がこれまでに行ったことは次のとおりです。

には、次のコードを使用してForm1表示しているボタンがあります。Form2

this.Hide();
Form2 form2 = new Form2();
form2.Show();

には、次のコードを使用して非Form2表示にするボタンがあります。

this.Hide();

これで、タスク バーにトレイ アイコンができました。トレイ アイコンには があり、次のコードを使用したshowContexMenuStripという名前のオプションがあります。

Form1 form1 = new Form1();
form1.Show();

問題は、それをクリックすると、タスクバーに 2 つ目のトレイ アイコンが表示されることです。両方のトレイ アイコンに同じメニューがあり、どちらも機能しています。[もう一度表示] をクリックすると、 Form1が表示された別のウィンドウがポップアップ表示され、3 つのトレイ アイコンが表示されます。

誰かが私を助けることができますか?

4

4 に答える 4

5

毎回新しい Form1 を作成しているためです。

Form1 form1 = new Form1();

新しいForm1を作成するのではなく、古いものを表示したいとします。Form2 に最初のform1 への参照を与えます (たとえば、theMainform1 と呼びます)。そして、代わりに

Form1 form1 = new Form1();
form1.Show();

あなたがしたい

theMainform1.Show();

したがって、次のようになります。

 this.Hide();
 Form2 form2 = new Form2();
 form2.theMainform1 = this;
 form2.Show();
于 2012-07-17T16:35:21.330 に答える
4

問題は、Form1 の新しいインスタンスを作成していることです。これにより、古いウィンドウが復活するのではなく、まったく新しいウィンドウが作成されます。

Form1 form1 = new Form1();
    form1.Show();

Form2 が Form1 の元のインスタンスを参照する必要があります。次のような自己参照を渡すコンストラクタを作成できます。

Form2 form2 = new Form2(this);
于 2012-07-17T16:35:27.407 に答える
1

フォームで ShowInTaskbar を false に設定することにより、ウィンドウのタスクバーにアイコンが表示されないようにすることができます。ただし、新しいフォームを何度も作成していると言う場合、他の答えは正しいです。

2 つのフォームを同時に表示する必要があるのはなぜですか? 両方を同時に画面に表示し、同時にアクティブにする必要がありますか? その場合は、MDI インターフェイスを試してみてください。 http://en.wikipedia.org/wiki/Multiple_document_interface

WinForms では可能ですが、Microsoft は WPF でそれらから離れていると思います。

于 2012-07-17T16:44:04.860 に答える
0

誰かがそれを探している場合の作業コードは次のとおりです。

フォーム1:

/* Hiding Form1 and showing Form2 */    
private void btnHideForm1_Click(object sender, EventArgs e)
             {
                     Form mod = new Form2();
                     mod.Owner = this;
                     mod.Show();
                     this.Hide();
         }

フォーム2:

    /* Hiding Form2 and showing Form1 */
private void btnHideForm2_Click(object sender, EventArgs e)
         {
                 this.Owner.Show();
                 this.Close();
         }

助けてくれてありがとう!!!

愛してる!!!

于 2012-07-21T11:16:10.713 に答える