Как я должен отобразить батоню уведомления в WinForms?

StackOverflow https://stackoverflow.com/questions/2700364

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

Конечно, если вы не против, если вы не возражаете в панель уведомления, просто охватываю верхнюю часть своей формы, вы можете просто сделать все это очень легко с панелью. :)

Я искал то же самое только сейчас и нашел Это на коде проекта

Я еще не использовал его, поэтому я понятия не имею, насколько это цельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top