s yu Ответов: 1

Не удалось вывести активную форму на передний план или повторно показать скрытую форму


В моем проекте есть 2 формы. Из 1-й (или основной) формы я использую приведенный ниже код, чтобы показать 2-ю:
formViewData frmViewData = new formViewData(iCase, m_dt[iCase], m_dt[iCase]);
frmViewData.Show();
frmViewData.BringToFront();

Однако 2-й по-прежнему отстает от 1-го. Как правильно ее решить?
Кроме того, я также попробовал другой способ, а именно Скрыть 1-ю форму с помощью
this.Hide();  // or this.Visible = false;

Однако, когда я закрываю 2-ю форму, я не могу использовать код, чтобы открыть 1-ю форму.
View.uxMain.Show();  // Error: An object reference is required for the non-static field, method, or properties ...

Как правильно решить эту проблему? Спасибо, если вы можете поделиться своим опытом.

Что я уже пробовал:

Не удалось вывести активную форму на передний план или повторно показать скрытую форму

1 Ответов

Рейтинг:
0

OriginalGriff

Show предназначен для отображения новой, независимой формы, и пусть существующая продолжает оставаться прежней - это означает, что, когда она имеет фокус пользователя, она не может быть "позади" второй формы, или пользователь не может видеть, что он делает!.

Если то, что вы пытаетесь сделать, это показать форму, которая "берет под контроль" таким же образом, как и MessageBox - эффективно отключая "родительскую" форму до тех пор, пока MessageBox не будет закрыт, - то это просто:

formViewData frmViewData = new formViewData(iCase, m_dt[iCase], m_dt[iCase]);
frmViewData.ShowDialog();
Обработка вашей основной формы будет остановлена до тех пор, пока форма не будет закрыта.
Если вы хотите скрыть свою основную форму, пока отображается другая, то либо:
formViewData frmViewData = new formViewData(iCase, m_dt[iCase], m_dt[iCase]);
Hide();
frmViewData.ShowDialog();
Show();
Или обработайте второе событие FormClosed Form:
formViewData frmViewData = new formViewData(iCase, m_dt[iCase], m_dt[iCase]);
frmViewData.FormClosed += frmViewData_FormClosed;
Hide();
frmViewData.Show();

Затем в обработчике:
void frmViewData_FormClosed(object sender, FormClosedEventArgs e)
    {
    Show();
    }

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


s yu

Спасибо за ваш ответ. Моя проблема на самом деле заключается в том, что ранее открытая, а затем скрытая (с помощью Hide()) основная форма не может быть открыта снова. Во 2-й форме: frmViewData я набрал имя основной формы: uxMain. Но я не мог найти никакого связанного метода для этого. Чтобы снова открыть его, в котором все еще присутствуют предыдущие настройки, я должен нажать на значок инструмента.

OriginalGriff

Конечно, не можешь! Вторая форма не должна даже знать о существовании первой формы, не говоря уже о том, что она скрыта.
Вот почему код, который я вам показал, использует Show из обработчика событий FormClosed: когда вторая форма закрывается,основная форма показывает себя...