我应该如何在Winforms中显示通知栏?
-
01-10-2019 - |
题
你们都知道“您有新的答案!”通知栏这样。我想要以一种形式的同样的东西,最好是平滑。有一种简单的方法吗?还是我必须自己完全创建这个?
我的搜索没有任何好的结果,只有系统通知区域中的许多进度条和弹出窗口,但这不是我想要的。
我要显示的消息属于表单,而不是整个应用程序
解决方案
在您的表单中创建两个面板,一个通知面板停靠在顶部,在下面的内容面板下方固定在顶部。在您的表单中。负载,将通知面板的高度设置为零。不要在设计视图中将高度设置为零,您将无法单击通知面板进行编辑。
然后,当您收到通知时,在通知面板中绘制内容并创建一个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();
}
当然,如果您不介意仅覆盖表格顶部的通知栏,那么您可以通过面板很容易地完成整个事情。 :)
我刚才正在寻找同一件事,发现 这在代码项目上
我尚未使用它,所以我不知道它有多坚固。