You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MDI程序运行时无法显示子窗体/窗口的最新修改内容

MDI子窗体修改后无法显示最新版本的解决方法

针对你遇到的MDI程序子窗体修改后运行仍显示旧版本的问题,按以下步骤排查解决:

  • 重新生成整个解决方案
    有时候单独编译父窗体不会同步子窗体的最新修改,右键解决方案选择「重新生成解决方案」,确保所有项目都编译更新。如果之前有旧的编译缓存,先执行「清理解决方案」再重新生成。

  • 确认子窗体实例化逻辑
    你的代码里每次打开子窗体都是创建新实例(frmAdd add1 = new frmAdd();),这个逻辑是正确的。检查是否存在全局缓存旧窗体实例的情况,比如把frmAdd实例存在静态变量里复用,这种情况会导致显示旧版本,必须每次打开都创建新实例。

  • 检查Visual Studio调试配置

    1. 右键项目→属性→生成,确认输出路径指向的是当前项目的bin目录,避免调试时加载了旧的dll文件。
    2. 关闭「编辑并继续」功能:工具→选项→调试→取消勾选「启用编辑并继续」,这个功能偶尔会导致界面修改无法同步到运行程序。
  • 验证子窗体的Designer代码
    界面修改会自动同步到子窗体的Designer.cs文件里的InitializeComponent()方法,如果手动修改过这个方法可能导致界面失效。可以备份子窗体的Designer文件后删除,重新拖拽控件设计界面,让VS自动生成正确的Designer代码。

  • 检查项目引用(如果子窗体是单独类库)
    如果子窗体属于单独的类库项目,确保父窗体项目使用的是「项目引用」而非直接引用dll文件。使用项目引用会在编译时自动同步最新的子窗体dll,直接引用dll则需要手动替换。

你提供的代码参考

父窗体frmParent代码:

namespace MDIDemo
{
    public partial class frmParent : Form
    {
        public static LibraryClass l1 = new LibraryClass();

        public frmParent()
        {
            InitializeComponent();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Allocate memory for our about box
            frmAboutBox frmAbt = new frmAboutBox();

            // Assign the parent:
            frmAbt.MdiParent = this;        // This is the parent/main form

            frmAbt.Show();
        }

        private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (ActiveMdiChild != null)
            {
                ActiveMdiChild.Close();
            }
        }

        private void closeAllToolStripMenuItem_Click(object sender, EventArgs e)
        {
            while (ActiveMdiChild != null)
            {
                ActiveMdiChild.Close();
            }
        }

        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
        }

        private void cascadeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.Cascade);
        }

        private void tileHorizontalToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.TileHorizontal);
        }

        private void tileVerticalToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.TileVertical);
        }

        private void arrangeIconsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.LayoutMdi(MdiLayout.ArrangeIcons);
        }

        private void addToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Allocate memory for our add box
            frmAdd add1 = new frmAdd();

            // Assign the parent:
            add1.MdiParent = this;    // This is the parent/main form

            add1.Show();
        }

        private void showItemsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmShow show1 = new frmShow();
            
            show1.MdiParent = this;

            show1.Show();
        }
    }
}

子窗体frmAdd代码:

namespace MDIDemo
{
    public partial class frmAdd : Form
    {
        public frmAdd()
        {
            InitializeComponent();
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnClr_Click(object sender, EventArgs e)
        {
            txtISBN.Clear();
            txtAuth.Clear();
            numNum.Value = 0; 
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            ItemRec item1;
            
            item1.iSBN = "ISBN";
            item1.AuthorName = "Last First";
            item1.numOwned = 0;
            item1.numOnLoan = 0;

            try
            {
                item1.iSBN = txtISBN.Text;
                item1.AuthorName = txtAuth.Text;
                item1.numOwned = Convert.ToInt32(numNum.Value);
            }
            catch (Exception ex)
            {
                MessageBox.Show(txtISBN.Text + " is not an integer.",
                                                "Data entry error",
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Error);
            }

            // Add the item to our list: 

            try
            {
                frmParent.l1.Insert(item1);
            }
            catch (ListIsFullException ex)
            {
                MessageBox.Show(ex.Message,
                               "Data entry error",
                               MessageBoxButtons.OK,
                               MessageBoxIcon.Error);
            }

        }

        private void frmAdd_Load(object sender, EventArgs e)
        {

        }
    }
}

内容的提问来源于stack exchange,提问作者Antonio 1113

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:41:02