「あなたは新しい答えを持っています!」SOの通知バー。フォームでも同じことをしたいのですが、できれば同じようにスムーズです。簡単な方法はありますか?それとも、これを完全に自分で作成する必要がありますか?
私の検索では良い結果が得られず、システム通知領域に多くの進行状況バーとポップアップが表示されるだけでしたが、それは私が探しているものではありません.
表示したいメッセージは、アプリケーション全体ではなく、フォームに属しています
「あなたは新しい答えを持っています!」SOの通知バー。フォームでも同じことをしたいのですが、できれば同じようにスムーズです。簡単な方法はありますか?それとも、これを完全に自分で作成する必要がありますか?
私の検索では良い結果が得られず、システム通知領域に多くの進行状況バーとポップアップが表示されるだけでしたが、それは私が探しているものではありません.
表示したいメッセージは、アプリケーション全体ではなく、フォームに属しています
フォームのクライアント領域の上部からドロップダウンするパネルを単純にアニメーション化できます。
タイミングループでパネルのy座標を増やします。パネルは最初は見えなくなり、ゆっくりと見えるようになります。(パネルは -panel.height から始まり、0 まで下がります。)
パネルや UserControl を使用するのは難しくありませんが、面倒な部分は、バーが下にスライドするときにフォームの内容を下にスライドさせることです。簡単にするために、SplitContainer を使用します。上部の分割パネルには通知バーが含まれており、スプリッターの距離は最初は 0 です。SplitterDistance プロパティをインクリメントして、バーをスライドさせて表示します。このようにすると、フォームの他のコンテンツが下にスライドすることを心配する必要がなくなります (ドッキングを使用できなくなるため、面倒です)。
私が考えることができる SplitContainer を使用することの唯一の欠点は、バーのアニメーションがわずかに異なることです。テキストはバーと一緒に下にスクロールされず、バーが下にスライドすると所定の位置に表示されます。これが気になる場合は、スプリッターの距離を長くしてテキスト (またはパネル/カスタム コントロール) を下にスライドさせることで修正できます (コードを数行追加するだけです)。
バーの表示:
for (int i = 0; i <= 33; i++)
{
splitContainer1.SplitterDistance = i;
Thread.Sleep(5);
Refresh();
}
バーを非表示にする:
for (int i = 33; i >= 0; i--)
{
splitContainer1.SplitterDistance = i;
Thread.Sleep(5);
Refresh();
}
もちろん、通知バーがフォームの上部を覆うだけで構わない場合は、パネルを使用してすべてを非常に簡単に行うことができます。:)
フォームに 2 つのパネルを作成します。上部にドッキングされた通知パネルと、その下に固定されたコンテンツ パネルです。Form.Load で、通知パネルの高さをゼロに設定します。デザイン ビューで高さをゼロに設定しないでください。通知パネルをクリックして編集できなくなります。
次に、通知を受け取ったら、通知パネルにコンテンツを描画し、通知パネルの高さを数十ミリ秒ごとに数ピクセルずつ増加させる System.Windows.Form.Timer を作成します。パネルが希望の高さになったら停止します。パネルを非表示にするには、負の高さで同じことを行います。
これは再描画やサイズや位置の再計算を必要とせず、何もオーバードローせず、滑らかに見えます。私はこれを行いましたが、動作します。
特定のフォームに制限したい場合は、を に設定しPanel
てフォームに配置し、説明のラベルとそれを非表示にするボタンを配置するのは簡単です。Dock
DockStyle.Top
私はちょうど今同じことを探していて、コードプロジェクトでこれを見つけました
まだ使っていないので、固さはわかりません。