2011-09-16 2 views
9

私はパネルをコンテナとして使用しています。このパネルには背景としてコンテナパネル内に画像があります。ラベルは、その情報は時間とともに変化します。私は、新しい情報が表示されようとしているときに移行し、古い情報で情報パネルをフェードアウトし、新しい情報で同じパネルをフェードインします。情報パネルをフェードアウトするときに、私はコンテナパネルのバックグラウンドイメージを見ることができます。どちらのパネルにもBorderStyle = FixedSingleがあり、インフォメーションパネルには背景色があります。コンテンツを持つパネルをフェードイン/アウトする方法#

私の質問は、情報パネルとコンテンツ全体をフェードイン/アウトする方法はありますか?

私はウェブで検索していましたが、パネルの背景色を使用してこのエフェクトを使用するアプローチを見つけましたが、バックカラープロパティをフェードインしようとしているので、 :

Timer tm = new Timer(); 
    private void Form1_Shown(object sender, EventArgs e) 
    { 
     tm.Interval = 100; 
     tm.Tick += new EventHandler(timer1_Tick); 
     tm.Enabled = true; 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     int aa = 0; 
     panel2.BackColor = Color.FromArgb(aa, 255, 0, 0); 

     aa += 10; 
     if (aa > 255) 
      tm.Enabled = false; 
    } 

助けてください。

+0

では、私はWPFについて多くを知らないが、それはあなたのための選択肢であるならば、それはへのより良い選択かもしれませんあなたが探している効果を達成する。 http://en.wikipedia.org/wiki/Windows_Presentation_Foundation –

+0

はい、WPFでは、時間の経過とともにパネルの不透明度を変更するアニメーションを作成するだけです。 –

+1

あなたが直面する問題は、不透明度がコントロールレベルではなくフォームレベルでのみ利用可能であることです。おそらく巧妙なハックは、あなたのパネルにオーバーレイするフォーム上に同じイメージを作成し、opactiyが100%になると、フォームを隠すでしょう。 Winformsはこれでうまくいきません。 – LarsTech

答えて

3

個々のコントロールの不透明度を設定することはできません。フォーム自体に不透明度がありますが、コントロール全体をフェードアウトさせたくないと思います。それは制御がかかることを矩形領域に取り組んでいるので、私は(この実装は、パネル内の子コントロールに適用されることになると信じて http://www.slimee.com/2009/02/net-transparent-forms-and-controls-with.html

:あなたは不透明度をサポートするカスタムコントロールを作成することができます

は...ここでの例ですアップ)。私が間違っていると、すべての子コントロールをあなたの過度の振る舞いの一部として扱わなければならないでしょう。

他の人が言っているように、これを「スムーズ」に見せることは、多くの作業になる可能性があります。うまくいけば、誰かがより良い答えを持つことを望みます。

+0

私はあなたの答えに感謝します、私はあなたに同意する、このアプリの意図はいくつかの情報が時間に表示される大きなテレビにダッシュボードを持っている、その理由私はいくつかの視覚効果を与える視聴者に素敵な体験。おそらく私はこれを行うための別のツールを見つける必要があります。 – Somebody

2

他の回答で示唆されているように、パネルをフェードイン/アウトすることはできません。

起動時にフォームをフェードインまたはフェードアウトするか、フェードインまたはフェードアウトするモーダルダイアログフォームを使用できます。

フェード

private void FadeIn_Tick(object sender, EventArgs e) 
    { 
     this.Opacity += .08; 
     if (this.Opacity >= 1) 
     { 
      FadeIn.Stop(); 
     } 
    } 

フェードアウト

private void FadeOut_Tick(object sender, EventArgs e) 
    { 
     this.Opacity -= .08; //Decrease opacity 
     if (this.Opacity <= 0) //While it is not 0 
     { 
      FadeOut.Stop(); //Stop! 
      this.Close(); //Close the form 
     } 
    } 
+0

MisdartedPenguinにお返事いただきありがとうございますが、あなたのソリューションは(あなたの言ったように)フォームにのみ適用されます。 – Somebody

+0

これはこの質問の解決策ではありません。程遠い –

関連する問題