你们都知道“你有新的答案!” SO上的通知栏。我想在表单中使用相同的东西,最好是一样平滑。有简单的方法吗?还是我必须自己完全创建它?
我的搜索没有产生任何好的结果,系统通知区域只有很多进度条和弹出窗口,但这不是我想要的。
我要显示的消息属于一个表单,而不是整个应用程序
你们都知道“你有新的答案!” SO上的通知栏。我想在表单中使用相同的东西,最好是一样平滑。有简单的方法吗?还是我必须自己完全创建它?
我的搜索没有产生任何好的结果,系统通知区域只有很多进度条和弹出窗口,但这不是我想要的。
我要显示的消息属于一个表单,而不是整个应用程序
您可以简单地为从表单客户区顶部下拉的面板设置动画。
在定时循环中增加面板的 y 坐标。面板将开始不可见,然后慢慢变得可见。(面板会从 -panel.height 开始,一直到 0。)
Panel
如果您希望将其限制在特定的表单上,将 a放在表单上并将其Dock
设置为应该很容易DockStyle.Top
,然后为描述放置一个标签和一个隐藏它的按钮。
使用面板或 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();
}
当然,如果您不介意通知栏只是覆盖表单的顶部,那么您可以使用面板轻松完成整个操作。:)
在表单中创建两个面板,一个停靠在顶部的通知面板,一个位于顶部的内容面板下方。在您的 Form.Load 中,将通知面板的高度设置为零。不要在设计视图中将高度设置为零,您将无法单击通知面板进行编辑。
然后当你收到通知时,在通知面板中绘制内容并创建一个 System.Windows.Form.Timer,它每隔几十毫秒左右将通知面板的高度增加几个像素。当面板达到所需高度时停止。对负高度执行相同操作以隐藏面板。
这不需要重新绘制或重新计算任何东西的大小或位置,不会过度绘制任何东西,并且看起来很漂亮。我已经做到了,并且有效。
我刚才在找同样的东西,在代码项目上找到了这个
我还没有使用它,所以我不知道它有多坚固。