Как сделать «всплывающее окно» (подсказка, выпадение- вниз, всплывающее) окно в Winforms?

Как я могу сделать то, что я буду называть, "всплывающим" окном "в WinForms?


Поскольку я использовал собственное вымышленное слово " всплывающее окно ", позвольте мне привести примеры этого так называемое «всплывающее» окно:

  • всплывающее окно (может выходить за пределы своей родительской формы, не отображается на панели задач, не является модальным и не крадет фокус) :

    enter image description here

  • всплывающее меню окно (может выходить за пределы границ своей родительской формы, не отображается на панели задач, не является модальным и не крадет фокус):

    enter image description here

  • a раскрывающееся окно (может выходить за пределы своей родительской формы, не отображается на панели задач, не является модальным и не крадет фокус):

    enter image description here

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

    enter image description here

  • Обновить Всплывающее окно не делать себя «активным» окном при взаимодействии с помощью мыши o r клавиатура (окно «владелец» остается активным окном):

enter image description here

Атрибуты, которые я ищу в этом мифическом «всплывающем окне», заключаются в том, что оно:

  • может распространяться за пределы границ его родительская форма (т.е. не является дочерним окном )
  • не отображается на панели задач (т.е. эвристика окна о том, какие окна должны появиться, не срабатывает, и у него нет расширенного окна WS_EX_APPWINDOW style)
  • не является модальным (т.е. не отключает своего «владельца» )
  • не крадет фокус
  • всегда сверху своего «владельца»
  • делает не становится «активным» окном при взаимодействии с ним (владелец остается активным)

Приложения Windows уже умеют создавать такие окна. Как я могу сделать это в приложении WinForms?

Связанные вопросы

  • Как добиться всего вышеперечисленного в машинном коде?
  • Как создать всплывающее окно в Delphi?
  • У меня есть этот машинный код чтобы показать "всплывающее" окно - какие P / Invokes требуются для выполнения тех же действий в .NET?
  • У меня есть набор P / Invoke в .NET - могу ли я повторно использовать обычную WinForm, переопределяя определенные методы, для добиться того же эффекта?
  • У меня есть WinForm, который я показываю как «всплывающее окно», переопределяя определенные методы - есть ли встроенный Control , который может действовать для меня как всплывающее окно?
  • Как смоделировать раскрывающееся окно в WinForms?

Попытка №1

Я попробовал метод Show (onwer) + ShowWithoutActivation :

PopupForm dd = new PopupForm ();
dd.Show(this);

с PopupForm:

public class PopupForm: Form
{
    public PopupForm()
    {
        InitilizeComponent();
    }

    private void InitilizeComponent()
    {
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.WindowState = FormWindowState.Normal;
        this.ShowInTaskbar = false;
    }

    protected override bool ShowWithoutActivation
    { get { return true; } }
}

Почти решено проблема, но затем я обнаружил напомнил о другом свойстве «всплывающих» окон: они не берут фокус со своей формы «владельца» становятся активными при взаимодействии с мышью или клавиатурой .

6
задан Community 23 May 2017 в 12:01
поделиться