大家好,小弟初学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中~
现在遇到一些问题,小的在切换子想窗体的时候用的 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中~
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货