Всплывающее окно в winform С#
Я работаю над проектом, где мне нужно всплывающее окно. Но дело в том, что я также хочу иметь возможность добавлять текстовые поля и т.д. В это всплывающее окно через конструктор форм.
Итак, в основном у меня есть кнопка, и когда вы нажимаете на нее, она откроет другое окно, которое я разработал в дизайнере форм.
Я занимаюсь поиском в Интернете, но не нашел того, что мне было нужно, поэтому я надеялся, что вы, ребята, сможете мне помочь!
Ответы
Ответ 1
Просто создайте другую форму (давайте назовем ее FormPopoup
) с помощью Visual studio. В обработчике кнопок напишите код followng:
var form = new FormPopoup();
form.Show(this); // if you need non-modal window
Если вам нужно использовать немодальное окно: form.Show();
. Если вам нужен диалог (так что ваш код будет зависать в этом вызове до закрытия открытой формы), используйте: form.ShowDialog()
Ответ 2
Формы в С# - это классы, наследующие базовый класс Form
.
Вы можете показать всплывающее окно, создав экземпляр класса и вызвав ShowDialog()
.
Ответ 3
Это не так просто, потому что всплывающие окна не поддерживаются в формах Windows. Хотя формы окон основаны на win32 и в win32 всплывающие окна поддерживаются.
Если вы примете несколько трюков, следующий код заставит вас всплывать. Вы решаете, хотите ли вы использовать его хорошо:
class PopupWindow : Control
{
private const int WM_ACTIVATE = 0x0006;
private const int WM_MOUSEACTIVATE = 0x0021;
private Control ownerControl;
public PopupWindow(Control ownerControl)
:base()
{
this.ownerControl = ownerControl;
base.SetTopLevel(true);
}
public Control OwnerControl
{
get
{
return (this.ownerControl as Control);
}
set
{
this.ownerControl = value;
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.Style = WindowStyles.WS_POPUP |
WindowStyles.WS_VISIBLE |
WindowStyles.WS_CLIPSIBLINGS |
WindowStyles.WS_CLIPCHILDREN |
WindowStyles.WS_MAXIMIZEBOX |
WindowStyles.WS_BORDER;
createParams.ExStyle = WindowsExtendedStyles.WS_EX_LEFT |
WindowsExtendedStyles.WS_EX_LTRREADING |
WindowsExtendedStyles.WS_EX_RIGHTSCROLLBAR |
WindowsExtendedStyles.WS_EX_TOPMOST;
createParams.Parent = (this.ownerControl != null) ? this.ownerControl.Handle : IntPtr.Zero;
return createParams;
}
}
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr SetActiveWindow(HandleRef hWnd);
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_ACTIVATE:
{
if ((int)m.WParam == 1)
{
//window is being activated
if (ownerControl != null)
{
SetActiveWindow(new HandleRef(this, ownerControl.FindForm().Handle));
}
}
break;
}
case WM_MOUSEACTIVATE:
{
m.Result = new IntPtr(MouseActivate.MA_NOACTIVATE);
return;
//break;
}
}
base.WndProc(ref m);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.FillRectangle(SystemBrushes.Info, 0, 0, Width, Height);
e.Graphics.DrawString((ownerControl as VerticalDateScrollBar).FirstVisibleDate.ToLongDateString(), this.Font, SystemBrushes.InfoText, 2, 2);
}
}
Поэкспериментируйте с ним немного, вам нужно поиграть со своим положением и его размером. Используйте его неправильно, и ничего не отображается.
Ответ 4
Если вы хотите создать новую форму при нажатии кнопки, код ниже может вам пригодиться:
private void settingsButton_Click(Object sender, EventArgs e)
{
// Create a new instance of the Form2 class
Form2 settingsForm = new Form2();
// Show the settings form
settingsForm.Show();
}
Здесь вы также можете использовать метод "Показать диалог"
Ответ 5
"Но дело в том, что я также хочу иметь возможность добавлять текстовые поля и т.д. в это всплывающее окно через конструктор форм".
Это неясно из вашего описания на каком этапе процесса разработки вы находитесь. Если вы еще не поняли это, чтобы создать новую форму, нажмите Проект → Добавить Windows Form, затем введите имя для формы и нажмите кнопку "Добавить". Теперь вы можете добавить элементы управления в свою форму, как и следовало ожидать.
Когда придет время для его отображения, следуйте советам других сообщений, чтобы создать экземпляр, и вызовите Show() или ShowDialog(), если это необходимо.
Ответ 6
Я использую этот метод.
добавить из того, что вы хотите всплывать, добавить все элементы управления, которые вам нужны.
в коде вы можете обрабатывать ввод пользователя и возвращать результат вызывающему абоненту.
для всплывающей формы просто создайте новый экземпляр формы и метода show.
/* create new form instance. i am overriding constructor to allow the caller form to set the form header */
var t = new TextPrompt("Insert your message and click Send button");
// pop up the form
t.Show();
if (t.DialogResult == System.Windows.Forms.DialogResult.OK)
{
MessageBox.Show("RTP", "Message sent to user");
}