Как исправить «Изменение MdiParent в MDIChild» в C#

#c# #winforms #mdichild

#c# #winforms #mdichild

Вопрос:

Мои коды для изменения MDIChild в классе MdiParent

         public void SetupMdi(Form form)
        {
            clearMdi();
            activeMdiForms.Add(form);
            form.MdiParent = this;
            form.Show();
            form.Location = new Point(0, 0);
            foreach(Form forms in activeMdiForms)
            {
                MessageBox.Show(forms.ToString());
            }
            return;
        }

        public void clearMdi()
        {
            foreach(Form form in activeMdiForms)
            {
                form.Dispose();
            }
            activeMdiForms.Clear();
            return;
        }
  

Это отлично работает в родительском классе

         private void Menu_Load(object sender, EventArgs e)
        {
            VersionChecker ver = new VersionChecker();
            versionLbl.Text = "Depo Stok Programı Version "   earlySettings.version;
            SetupMdi(new Login());
            GCTimer.Start();
        }
  

Но я вызвал метод SetupMdi из дочерней формы, он работает, но дочерняя форма не отображается, но она использует оперативную память

 public partial class Login : Form
{
     public async void login()
    {
        earlySettings.usrName = obj.UserName;
        MainMenu form = new MainMenu();
        new Menu().SetupMdi(new MainMenuMdi());
        this.Dispose();
    }
}
  

Я попробовал ApiClass, он не работает как дочерний класс

Ответ №1:

Но я вызвал метод SetupMdi из дочерней формы, он работает, но дочерняя форма не отображается, но она использует оперативную память

Предполагая, что ваш код находится в реальном MDIChild, тогда вы можете привести свойство MdiParent к вашему родительскому типу (я полагаю, Menu ?), а затем вызвать SetupMdi() метод:

 // ... assuming we are in an MdiChild ...
((Menu)this.MdiParent).SetupMdi(new MainMenuMdi());