Christopher Fernandes Ответов: 1

Дочерняя форма Windows быстро открывается и закрывается


У меня есть приложение windows form, в котором есть только одна родительская форма и много дочерних форм, но дочерние формы открываются и быстро закрываются. См. ниже код, который выполняется на menustrip item click event

TimeTaskManager objTimeTaskManager = новый TimeTaskManager();
objTimeTaskManager.Покажите();
objTimeTaskManager.MdiParent = это;
objTimeTaskManager.BringToFront();
objTimeTaskManager.StartPosition = FormStartPosition.CenterParent;
objTimeTaskManager.Сосредоточить();

Может ли кто-нибудь показать мне, как исправить эту проблему?

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

Я попробовал следующий код

TimeTaskManager objTimeTaskManager = новый TimeTaskManager();
objTimeTaskManager.MdiParent = это;
objTimeTaskManager.Покажите();
objTimeTaskManager.BringToFront();
objTimeTaskManager.StartPosition = FormStartPosition.CenterParent;
objTimeTaskManager.Сосредоточить();

1 Ответов

Рейтинг:
12

BillWoodruff

Я думаю, что вы не установили свойство MdiParent ваших вновь созданных форм.

Чтобы новая дочерняя форма была центрирована в своей форме MdiParent, вам необходимо покажите его после того, как будет показана основная форма и, использовать CenterScreen, не CenterParent:

using System;
using System.Windows.Forms;

namespace MdiTest2020
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private Form2 f2 = new Form2();

        private void ShowNewMdiChildFormToolStripMenuItem_Click(object sender, EventArgs e)
        {
            f2.MdiParent = this;
            f2.StartPosition = FormStartPosition.CenterScreen;
            f2.Show();
        }
    }
}
Эти странные обходные пути необходимы, потому что архитектура MDI WinForm-это устаревший беспорядок, и MS предлагает вам не использовать ее.


Christopher Fernandes

Я установил родитель как IsMDIContainer true и все же он делает то же самое

BillWoodruff

Ваша основная форма должна иметь IsMdiContainer = true; каждая дочерняя форма должна иметь свое свойство MdiParent, установленное для экземпляра формы Mai. Изучите пример рабочего кода, который я опубликовал, и выясните, что вы делаете по-другому.

Christopher Fernandes

Я делаю все, как вы показали, и все же он открывается и закрывается быстро

BillWoodruff

Я хотел бы помочь вам еще больше: очевидно, что в вашем коде происходит что-то еще, что мешает вам использовать рабочий пример, который я вам показал.

Вам нужно установить точки останова до и после команды 'Show на ваших дочерних формах и один шаг (F11), чтобы определить, что происходит.

Christopher Fernandes

Это исправлено. Я не знаю, как это сделать. Большое спасибо

BillWoodruff

Добро пожаловать :)