Как я должен отобразить батоню уведомления в WinForms?
-
01-10-2019 - |
Вопрос
Вы все знаете, что «У тебя новые ответы!» Бар уведомлений на так. Я бы хотел то же самое в форме, желательно как гладкую. Есть ли простой способ? Или я должен полностью создать это сам?
Мои поиски не дали никаких хороших результатов, только много прогрессных баров и всплывающих окон в области уведомлений системы, но это не то, что я ищу.
Сообщения, которые я хочу отображать, принадлежат форме, а не для всего приложения
Решение
Создайте две панели в своей форме, панель уведомлений пришла к началу, а ниже, что панель содержимого привязана к началу. В вашей форме. Установите высоту панели уведомлений на ноль. Не устанавливайте высоту до нуля в представлении дизайна, вы не сможете нажать на панель уведомлений, чтобы редактировать ее.
Затем, когда вы получаете уведомление, нарисуйте содержимое на панели уведомлений и создайте систему .Windows.form.timer, что увеличивает высоту панели уведомлений несколькими пикселями каждые несколько десятков миллисекунд или около того. Остановитесь, когда панель имеет желаемую высоту. Сделайте то же самое с отрицательной высотой, чтобы скрыть панель.
Это не требует перекрашивания или пересчета размеров или положений чего-либо, не переполняет ничего, и выглядит Slick. Я сделал это, и это работает.
Другие советы
Вы можете просто анимировать панель, падающей вниз с верхней части клиентской области формы.
Увеличение координаты Y панели в замывенном цикле. Группа начнет невидима и медленно становится видимой. (Группа начнется на -Panel.height и работать до 0.)
Если вы хотите, чтобы он ограничен конкретной формой, это должно быть достаточно легко, чтобы положить Panel
по форме с его Dock
установлен в DockStyle.Top
, Затем поместите этикетку для описания и кнопку, которая скрывает ее.
Нетрудно делать с панелью или USERCONTROL, но концевая часть выполняет содержимое формы, скользящую вниз, когда бар скользит вниз. Чтобы упростить, что я бы использовал SplitContainer. Верхняя SLICPANEL содержит панель уведомлений и расстояние сплиттера, первоначально 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();
}
Конечно, если вы не против, если вы не возражаете в панель уведомления, просто охватываю верхнюю часть своей формы, вы можете просто сделать все это очень легко с панелью. :)
Я искал то же самое только сейчас и нашел Это на коде проекта
Я еще не использовал его, поэтому я понятия не имею, насколько это цельно.