你们都知道“您有新的答案!”通知栏这样。我想要以一种形式的同样的东西,最好是平滑。有一种简单的方法吗?还是我必须自己完全创建这个?

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

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

有帮助吗?

解决方案

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

然后,当您收到通知时,在通知面板中绘制内容并创建一个system.windows.form.timer,将通知面板的高度增加每几十毫秒左右。当面板处于所需高度时,停止。做同样的操作,用负高度隐藏面板。

这不需要重新粉刷或重新计算任何东西的大小或位置,不会透支任何东西,并且看起来光滑。我已经做到了,它起作用了。

其他提示

您可以简单地将一个从表单客户端区域的顶部降低的面板动画。

在定时循环中增加面板的Y坐标。面板将开始看不见,并慢慢变得可见。 (面板将从-panel.height开始,并降低到0。)

如果您想将其限制在特定表格中,那么放置一个很容易 Panel 在其形式及其 Dock 设置 DockStyle.Top, ,然后在将其隐藏的描述和按钮上放置标签。

使用面板或USERCONTROL并不难,但是随着条向下滑动时,曲折的部分使该形式的内容滑下。为了简化我将使用SplitContainer。顶部拆分台面包含通知栏,分离器距离最初为0。通过递增分配属性属性将杆逐渐放入视图。这样做意味着您不必担心使表单的其他内容滑下(这很麻烦,因为它可以防止您使用对接)。

我能想到的唯一缺点是,条的动画会略有不同:文本不会用条向下滚动,随着条形滑落,它将被揭示。如果这使您感到困扰,则可以通过增加分离器距离(只有几行代码)时将文本(或面板/自定义控件)滑动来修复它。

显示标准:

    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();
    }

当然,如果您不介意仅覆盖表格顶部的通知栏,那么您可以通过面板很容易地完成整个事情。 :)

我刚才正在寻找同一件事,发现 这在代码项目上

我尚未使用它,所以我不知道它有多坚固。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top