Winformsに通知バーを表示するにはどうすればよいですか?
-
01-10-2019 - |
質問
あなたは皆、「あなたは新しい答えを持っている!」を知っています通知バーオンSO。同じことがフォームで、できればスムーズなものが欲しいです。簡単な方法はありますか?それとも、自分でこれを完全に作成する必要がありますか?
私の検索では良い結果が得られませんでした。システム通知領域には多くの進行状況バーとポップアップだけが発生しましたが、それは私が探しているものではありません。
表示したいメッセージは、アプリケーション全体ではなくフォームに属します
解決
フォームに2つのパネルを作成します。通知パネルが上部にドッキングされ、その下にトップに固定されたコンテンツパネルがあります。 form.loadで、通知パネルの高さをゼロに設定します。デザインビューで高さをゼロに設定しないでください。通知パネルをクリックして編集することはできません。
次に、通知を取得したら、通知パネルにコンテンツを描画し、System.Windows.form.timerを作成します。これにより、通知パネルの高さが数十ミリ秒ごとに数ピクセル増加します。パネルが目的の高さの場合は停止します。パネルを隠すために負の高さで同じことをします。
これには、サイズやポジションを塗り替えたり再計算したりする必要はなく、何も干渉せず、滑らかに見えます。私はこれをしました、そしてそれは機能します。
他のヒント
フォームのクライアント領域の上部からドロップダウンするパネルをアニメーション化するだけです。
タイムされたループでパネルのy座標を増やします。パネルは見えなくなり、ゆっくりと見えます。 (パネルは-panel.heightで始まり、0になります。
特定のフォームに制約したい場合は、置くのに十分簡単なはずです Panel
そのフォームに Dock
に設定 DockStyle.Top
, 、説明のラベルとそれを隠すボタンを配置します。
パネルやusercontrolで行うのは難しくありませんが、棒が下にスライドすると、フォームの内容が滑り落ちるようにしています。 SplitContainerを使用することを簡素化するため。上部のスプリットパネルには通知バーが含まれており、スプリッター距離は最初に0があります。スプリッターディスタンスプロパティを増やしてバーを視界にスライドさせます。このようにすることは、フォームの他のコンテンツをスライドさせることを心配する必要がないことを意味します(これは、ドッキングを使用することを妨げるため、手間がかかります)。
私が考えることができる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();
}
もちろん、フォームの上部をカバーする通知バーを気にしない場合は、パネルですべてを非常に簡単に実行できます。 :)
私はちょうど今同じものを探していて、見つけました これはコードプロジェクトです
私はまだそれを使用していないので、それがどれほどしっかりしているか分かりません。