大家好,小弟初学winform,现想实现MainForm中加入SplitContainer,panel1中放TreeView,panel2中加载子窗体,子窗体的调用由TreeView中nodes实现。
现在遇到一些问题,小的在切换子想窗体的时候用的        private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (treeView1.Nodes[0].Nodes[0].Nodes[0].IsSelected)
            {
                
                this.splitContainer1.Panel2.Controls.Clear();
                OpenWindow(typeof(SysDefine).ToString());
            }
            if (treeView1.Nodes[0].Nodes[1].Nodes[0].Nodes[0].IsSelected)
            {
                this.splitContainer1.Panel2.Controls.Clear();
                OpenWindow(typeof(LsfForm).ToString());
                
            }
        }
        private void OpenWindow(string ChildTypeString)
        {            Form myChild = null;            if (!ContainMDIChild(ChildTypeString))
            {                // Get current process assembly                Assembly assembly = Assembly.GetExecutingAssembly();                // Create data type using type string                Type typForm = assembly.GetType(ChildTypeString);                // Create object using type's "InvokeMember" method                Object obj = typForm.InvokeMember(                    null,                    BindingFlags.DeclaredOnly |                    BindingFlags.Public | BindingFlags.NonPublic |                    BindingFlags.Instance | BindingFlags.CreateInstance,                    null,                    null,                    null);                // Show child form                if (obj != null)
                {                    myChild = obj as Form;                    myChild.TopLevel = false;
                    
                    //myChild.Parent = splitContainer1.Panel2;
                    myChild.Dock = System.Windows.Forms.DockStyle.Fill;
                    myChild.FormBorderStyle = FormBorderStyle.None;
                    this.splitContainer1.Panel2.Controls.Add(myChild);
                    myChild.Show();
                    myChild.TopMost = true;
                    myChild.Focus();                }            }        }        /// <summary>        /// Search mdi child form by specific type string        /// </summary>        /// <param name="ChildTypeString"></param>        /// <returns></returns>        private bool ContainMDIChild(string ChildTypeString)
        {            Form myMDIChild = null;            foreach (Form f in this.MdiChildren)
            {                if (f.GetType().ToString() == ChildTypeString)
                {                    // found it                    myMDIChild = f;                    break;                }            }            // Show the exist form            if (myMDIChild != null)
            {                
                myMDIChild.TopLevel = false;
                this.splitContainer1.Panel2.Controls.Add(myMDIChild);
                myMDIChild.Parent = splitContainer1.Panel2;                myMDIChild.Show();                myMDIChild.Focus();                return true;            }            else                return false;        }
这样我发现再次showLsfForm时无法将之前对子窗体执行的操作加载出来,比如在LsfForm中的textbox中写入内容,再次show它的时候却消失,可能是开了新的一个,我现在的想法是,如何将clear掉的子窗体再visible出来,并且显示在panel2中~