Как сделать всплывающее окно в c

Обновлено: 01.05.2024

I'm working on a project where I need a popup window. But the thing is I also want to be able to add textboxes etc in this popup window thru the form designer.

So basically I have a button and when you click on it it will open another window that I've designed in the form designer.

I've been doing some googling but I haven't found what I needed yet so I was hoping you guys could help me!

6 Answers 6

Just create another form (let's call it formPopup ) using Visual Studio. In a button handler write the following code:

If you need a non-modal window use: formPopup.Show(); . If you need a dialog (so your code will hang on this invocation until you close the opened form) use: formPopup.ShowDialog()

This is not so easy because basically popups are not supported in windows forms. Although windows forms is based on win32 and in win32 popup are supported. If you accept a few tricks, following code will set you going with a popup. You decide if you want to put it to good use :

Experiment with it a bit, you have to play around with its position and its size. Use it wrong and nothing shows.

Nice, Can this inherit from UserControl or will it create problems? What is the purpose of overriding the wm_mouseactivate? last question, Can I use this.Activate() to keep compat with mono or will it not work since this is not a form? ty

Don't know about user control, it is already itself derived from control so has other specialised behavior than control does, but it might work. Never tested this on mono either, I am not sure about the dll import to be more specific. In short it is making use of the underlying win32 api system.

I see there is duplicate of this answer for another question. I hope there is no more (they are posted nearly at same time, which is suspicious). Normally you would have to cast close vote on question as duplicate of this one instead of copy/pasting your answers

I was not sure if this was what the op wanted. And since this is not accepted as answer I think my assumption is correct. The op meant something different with popup.

You can show a popup by creating an instance of the class and calling ShowDialog() .

If you mean to create a new form when a button is clicked, the below code may be of some use to you:

From here, you could also use the 'Show Dialog' method

"But the thing is I also want to be able to add textboxes etc in this popup window thru the form designer."

It's unclear from your description at what stage in the development process you're in. If you haven't already figured it out, to create a new Form you click on Project --> Add Windows Form, then type in a name for the form and hit the "Add" button. Now you can add controls to your form as you'd expect.

When it comes time to display it, follow the advice of the other posts to create an instance and call Show() or ShowDialog() as appropriate.

Это делается двумя способами. Рекомендуемый способ, если имеется диалоговое окно WPF, является производным от DialogWindow , а затем вызывается ShowModal для вывода диалогового окна. В этом случае нет необходимости управлять модальным состоянием родительского окна.

Если диалоговое окно не является WPF или по какой-либо другой причине не удается создать класс диалогового окна из DialogWindow , необходимо получить родительский элемент диалогового окна, вызвав GetDialogOwnerHwnd метод и самостоятельно управлять модальным состоянием. для этого EnableModeless перед отображением диалогового окна вызовите его с параметром 0 (false) и снова вызовите метод с параметром 1 (true) после закрытия диалогового окна.

Создание диалогового окна, производного от Диалогвиндов

Создайте проект VSIX с именем опендиалогтест и добавьте команду меню с именем опендиалог. Дополнительные сведения о том, как это сделать, см. в разделе Создание расширения с помощью команды меню.

Чтобы использовать DialogWindow класс, необходимо добавить ссылки на следующие сборки (на вкладке "платформа" диалогового окна " Добавление ссылки "):

В опендиалог. CS добавьте следующую using инструкцию:

Объявите класс с именем TestDialogWindow , производным от DialogWindow :

Чтобы можно было максимально увеличить и развернуть диалоговое окно, задайте HasMaximizeButton для параметра и значение HasMinimizeButton true:

В OpenDialog.ShowMessageBox методе замените существующий код следующим:

Создайте и запустите приложение. должен появиться экспериментальный экземпляр Visual Studio. В меню Сервис экспериментального экземпляра должна отобразиться команда с именем Invoke опендиалог. При нажатии этой команды должно отобразиться диалоговое окно. Вы сможете максимально увеличить и развернуть окно.

Создание и управление диалоговым окном, не производным от Диалогвиндов

Для этой процедуры можно использовать решение опендиалогтест , созданное в предыдущей процедуре, с теми же ссылками на сборки.

Добавьте следующие using объявления:

Создайте класс с именем TestDialogWindow2 , производным от Window :

Добавьте закрытую ссылку на IVsUIShell :

Добавьте конструктор, который задает ссылку на IVsUIShell :

В OpenDialog.ShowMessageBox методе замените существующий код следующим:

Создайте и запустите приложение. В меню Сервис должна отобразиться команда с именем Invoke опендиалог. При нажатии этой команды должно отобразиться диалоговое окно.

Элемент ToolTip представляет всплывающую подсказку при наведении на какой-нибудь элемент. Для определения всплывающей подсказки у элементов уже есть свойство ToolTip, которому можно задать текст, отображаемый при наведении:

Также мы можем более точно настроить всплывающую подсказку с помощью свойства Button.ToolTip :

Всплывающие подсказки можно применять не только кнопкам, но и ко всем другим элементам управления, например, к текстовому блоку:

Оба определения всплывающей подсказки будут аналогичны.

Поскольку ToolTip является элементом управления содержимого, то в него можно встроить другие элементы для создания более богатой функциональности. Например:

Элемент ToolTip в WPF

Здесь у нас два переключателя, и на одном из них определен расширенный элемент ToolTip: а именно в него вложен элемент Image, выводящий изображение, и элемент TextBlock. Таким образом, можно создавать всплывающие подсказки с различным наполнением.

Изображение для элемента Image в данном случае было добавлено в проект.

Свойства ToolTip

Некоторые полезные свойства элемента Tooltip:

HasDropShadow : определяет, будет ли всплывающая подсказка отбрасывать тень.

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

HorizontalOffset/VerticalOffset : определяет смещение относительно начального местоположения.

PlacementTarget : определяет позицию всплывающей подсказки относительно другого элемента управления.


Здесь у нас три переключателя. У первого мы задаем свойства через элемент ToolTip. Для второго переключателя мы также можем задать свойства, несмотря на то, что здесь мы всплывающую подсказку задаем просто ToolTip="Цена: 29990 рублей" Content="Nexus 5X" . В этом случае мы можем использовать прикрепленные свойства класса ToolTipService :

InitialShowDelay : задает задержку перед отображением всплывающей подсказки

ShowDuration : устанавливает время отображения всплывающей подсказки

BetweenShowDelay : устанавливает время, в течение которого пользователь сможет перейти к другому элементу с подсказкой, и для этого элемента не будет работать свойство InitialShowDelay (если оно указано)

ToolTip : устанавливает содержимое всплывающей подсказки

HasDropShadow : определяет, будет ли подсказка отбрасывать тень

ShowOnDisabled : устанавливает поведение всплывающей подсказки для недоступного элемента (со значением IsEnabled="True" ). Если это свойство равно true, то подсказка отображается для недоступных элементов. По умолчанию равно false.

Placement / HorizontalOffset / VerticalOffset / PlacementTarget : те же свойства, что и у элемента ToolTip, которые устанавливают положение всплывающей подсказки

Программное создание всплывающей подсказки

Допустим, в коде XAML у нас определена следующая кнопка:

Popup

Элемент Popup также представляет всплывающее окно, только в данном случае оно имеет другую функциональность. Если Tooltip отображается автоматически при наведении и также автоматически скрывается через некоторое время, то в случае с Popup все эти действия нам надо задавать вручную.

Так, чтобы отразить при наведении мыши на элемент всплывающее окно, нам надо соответственным образом обработать событие MouseEnter .

Второй момент, который надо учесть, это установка свойства StaysOpen="False" . По умолчанию оно равно True, а это значит, что при отображении окна, оно больше не исчезнет, пока мы не установим явно значение этого свойства в False.

Итак, создадим всплывающее окно:

Элемент Popup в WPF

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

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

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

обновление A всплывающие окно не заставляют себя "активные" окна когда общались с помощью мыши или клавиатуры (окно "владелец" остается активным окном):

enter image description here

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

  • can расширения вне границ родительской формы (т. е. не является дочерним окном)
  • не появляется в задач (т. е. эвристика окна, в котором должны появиться окна, не срабатывает, и у него нет расширенного стиля окна WS_EX_APPWINDOW)
  • не модальные (т. е. не отключает своего "владельца")
  • не воровать фокус
  • всегда on-top из его "рук"
  • не становится "активным" окном при взаимодействии с (владелец остается активным)

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

вопросы

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

Я пробовал Show(onwer) + ShowWithoutActivation способ:

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

вы хотите иметь собственное окно. В основной форме:

PopupForm должен выглядеть следующим образом:

и убедитесь, что PopupForm.ShowInTaskbar = false .

Мне было любопытно, как выпадающие списки combobox и меню работают, поэтому я сделал еще несколько исследований.

существует два основных подхода.

создайте всплывающее окно в виде перекрывающегося окна, принадлежащего главному окну

этот метод необходим, если всплывающее окно имеет встроенные элементы управления, или если вы хотите, чтобы всплывающее окно, чтобы вести себя как немодальное диалоговое окно.

создайте всплывающее окно как дочернее Окно рабочего стола

этот метод используется выпадающими списками combobox и (я думаю) меню, но вы не можете вставлять дочерние элементы управления, поэтому он не широко применим.

всплывающее окно является дочерним окном, поэтому оно не мешает активации. Он всегда сверху. Захват мыши используется для обнаружения щелчков вне всплывающего окна и отклонения его.

создайте всплывающее окно как дочернее окно рабочего стола, а затем покажите его без активации.

после этого ваше исходное окно остается активированным, даже если вы нажмете на "всплывающее" окно. "Всплывающее" окно может иметь свои собственные дочерние элементы управления. Вы можете нажать на кнопку на нем. Но если это элемент управления редактированием, вы не можете его редактировать, я не знаю почему. Может быть, потому,что на вашем исходном окне уже есть курсор, мигающий.

Здравствуйте!
Мне нужно создать всплывающее окно для моей главной формы. То есть, когда завершится моя игра(победой), должно вылезть окошко в которое нужно вписать своё имя.
Подскажите, пожалуйста, как это реализовать?
P. S. Работаю с Windows Form

Как создать всплывающее окно?
Как создать форму, что при нажатии на кнопку она выезжала к примеру слева. А при повторном нажатии.


Создать всплывающее функциональное меню (как отдельное окно, а не MenuStrip)
Здравствуйте. Нужно сделать всплывающее функциональное меню,то есть как отдельное окно,а не.


Всплывающее окно
Здравствуйте. Есть исходник wpf с примером всплывающего окна. Как можно сделать такое.


Всплывающее окно на форме
Может заголовок не корректен, не знаю даже как сказать. Надо сделать примерно как фото. Чтобы при.

У меня вот родилась идея: правильно ли будет создать еще одну форму в которой создать textBox туда записать значения и передать в главную?
Для этого использовать ф-ции .Show и .Hide
Прокатит или это, как костыль в програму, и есть альтернативный, более простой выход?

то есть имя где хранится у вас победителя.

Добавлено через 1 минуту
Забыл не закрытие формы, а окончание игры

Salim_Destroyer, вы не правильно меня поняли. Пльзователей может быть много, а может быть один(любящий использовать разные имена). Я хочу, чтобы появлялось окно, куда пользователь мог ввести своё имя.

Решение

Добавлено через 2 минуты
Лучше тогда использовать ShowDialog

Добавлено через 3 минуты
А на форме уже textbox и кнопки ввести и отмена. И в обработчике передаете данные главной форме.
Способы передачи данных между формами приведены здесь

Всплывающее окно в Windows Form
Идея такова, есть массив слов, есть текст бокс, должно выплывать какое нибудь окно с этим массивом.

Реализовать всплывающее окно над треем
Как сделать такое окно? (Это всплывающее окно из Steam)


Как добавить всплывающее окно к PictureBox?
как для pictureBox добавить всплывающее окно?

Читайте также: