Открытие программной формы окна из другой формы
Я делаю приложение Windows Forms. У меня есть форма. Я хочу открыть новую форму во время выполнения из исходной формы нажатием кнопки. А затем закройте эту новую форму (через 2,3 секунды) программно, но из потока, отличного от основного потока gui.
- Кто-нибудь может мне помочь, как это сделать?
- Будет ли новая форма затрагивать или препятствовать тому, что происходит в исходной основной форме? (если да, то как это остановить?)
Ответы
Ответ 1
Чтобы открыть с помощью кнопки нажмите, пожалуйста, добавьте следующий код в обработчик событий кнопки
Form1 m = new Form1();
m.Show();
Здесь Form1 - это имя формы, которую вы хотите открыть.
Также, чтобы закрыть текущую форму, вы можете использовать
this.close();
Ответ 2
Я бы сделал это следующим образом:
Form2 frm2 = new Form2();
frm2.Show();
и закрыть текущую форму, я бы использовал
this.Hide();
вместо
this.close();
ознакомьтесь с этой ссылкой Youtube для простых учебных руководств по запуску, которые могут показаться вам полезными, если u - новичок
Ответ 3
Вам просто нужно использовать Dispatcher для выполнения графической операции из потока, а затем потока пользовательского интерфейса. Я не думаю, что это повлияет на поведение основной формы. Это может помочь вам:
Доступ к управлению пользовательским интерфейсом из BackgroundWorker Thread
Ответ 4
Это слишком старый вопрос, но отвечающий за сбор знаний.
У нас есть оригинальная форма (основная форма) с кнопкой для отображения новой формы (вторая форма).
![enter image description here]()
Код для нажатия кнопки ниже
private void button1_Click(object sender, EventArgs e)
{
New_Form new_Form = new New_Form();
new_Form.Show();
}
Теперь, когда клик сделан, новая форма отображается. Поскольку через 2 секунды вы хотите скрыть, мы добавляем событие onload в новый конструктор форм.
this.Load += new System.EventHandler(this.OnPageLoad);
Эта функция OnPageLoad запускается при загрузке этой формы
В NewForm.cs,
public partial class New_Form : Form
{
private System.Windows.Forms.Timer formClosingTimer;
public New_Form()
{
InitializeComponent();
}
private void OnPageLoad(object sender, EventArgs e)
{
formClosingTimer = new System.Windows.Forms.Timer(); // Creating a new timer
formClosingTimer.Tick += new EventHandler(CloseForm); // Defining tick event to invoke after a time period
formClosingTimer.Interval = 2000; // Time Interval in miliseconds
formClosingTimer.Start(); // Starting a timer
}
private void CloseForm(object sender, EventArgs e)
{
formClosingTimer.Stop(); // Stoping timer. If we dont stop, function will be triggered in regular intervals
this.Close(); // Closing the current form
}
}
В этой новой форме таймер используется для вызова метода, который закрывает эту форму.
Вот новая форма, которая автоматически закрывается через 2 секунды, мы сможем работать с обеими формами, где нет помех между этими двумя формами.
![enter image description here]()
Насколько вам известно,
form.close() освободит память, и мы больше никогда не сможем взаимодействовать с этой формой
form.hide() просто скрывает форму, где часть кода все еще может работать
Для получения дополнительной информации о таймере перейдите по этой ссылке, https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=netframework-4.7.2
Ответ 5
private void btnchangerate_Click(object sender, EventArgs e)
{
this.Hide(); //current form will hide
Form1 fm = new Form1(); //another form will open
fm.Show();
}
при нажатии btn текущая форма скрывается и открывается новая форма
Ответ 6
Это также может помочь:
void ButtQuitClick(object sender, EventArgs e)
{
QuitWin form = new QuitWin();
form.Show();
}
Измените ButtQuit на свое имя кнопки, а также измените QuitWin на имя формы, которое вы сделали.
Когда кнопка нажата, она откроет другое окно, вам нужно будет создать другую форму и кнопку в основной форме, чтобы она работала.