我应该如何在WinForms中显示通知栏?

时间:2010-04-23 16:47:03

标签: winforms notification-bar

你们都知道“你们有了新的答案!”关于SO的通知栏。我希望在表格中使用同样的东西,最好是顺畅的。有一个简单的方法吗?或者我必须自己完全创建吗?

我的搜索没有产生任何好结果,系统通知区域中只有很多进度条和弹出窗口,但这不是我想要的。

我要显示的消息属于表单,而不属于整个应用程序

5 个答案:

答案 0 :(得分:3)

您可以简单地为从表单客户区顶部下拉的面板设置动画。

在定时循环中增加面板的y坐标。面板将开始不可见并慢慢变得可见。 (该面板将从-panel.height开始,然后向下移动到0。)

答案 1 :(得分:1)

如果您希望将其约束为特定表单,则应该很容易在Panel设置为Dock的表单上放置DockStyle.Top,然后为其设置标签描述和隐藏它的按钮。

答案 2 :(得分:1)

使用面板或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();
    }

当然,如果您不介意通知栏只是覆盖表单的顶部,那么您可以使用面板轻松完成整个操作。 :)

答案 3 :(得分:1)

在表单中创建两个面板,一个停靠在顶部的通知面板,以及一个固定在顶部的内容面板。在Form.Load中,将通知面板的高度设置为零。在“设计视图”中不要将高度设置为零,您将无法单击通知面板进行编辑。

然后,当您收到通知时,在通知面板中绘制内容并创建一个System.Windows.Form.Timer,每隔几十毫秒左右就会将通知面板的高度增加几个像素。当面板具有所需高度时停止。以负高度执行相同操作以隐藏面板。

这不需要重新绘制或重新计算任何尺寸或位置,不会透支任何东西,并且看起来很光滑。我做到了这一点并且有效。

答案 4 :(得分:0)

我刚才正在寻找同样的事情并找到了this on code project

我还没用过它,所以我不知道它有多坚固。