c# 利用 splitcontainer 和treeview 在MDI上面显示窗体(进阶)

    xiaoxiao2023-03-28  12

    

    和上一页不同的是,增加tabcontrol和Activator.CreateInstance(Type),使 界面更加易操作和代码更加简洁。tabcontrol中的tabpage有页面提示信息,可以切换 不同的form。利用Activator.CreateInstance可以动态生成不同的form。关键点在于, 通过treeview的节点名,传递字符串给Activator.CreateInstance,该方法可以根据字符 串生成不同类型的from。这其中就要保证treeview中节点名和form各类型名称是一致的。

    主要代码如下:

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace PaneltoMems { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private bool checkequal(string src) { for (int j = 0; j<tabControl1.TabCount; j++) { if (tabControl1.TabPages[j].Controls.Count == 0) { tabControl1.TabPages.Remove(tabControl1.TabPages[j]); } } for (int j = 0; tabControl1.TabCount > 0 && j < tabControl1.TabCount; j++) { if (tabControl1.TabPages[j].Text == src) { tabControl1.SelectedTab = tabControl1.TabPages[j]; return true; } else { if (j == tabControl1.TabCount) return false; } } return false; } //根据所选Node,自动产生相应的窗体。 private void creatform(string formname) { string classname = "PaneltoMems." + formname; Form queryform = (Form)Activator.CreateInstance(Type.GetType(classname)); queryform.TopLevel = false; queryform.FormBorderStyle = FormBorderStyle.Sizable; queryform.WindowState = FormWindowState.Maximized; queryform.Dock = DockStyle.Fill; queryform.Name = formname; TabPage page1 = new TabPage(); page1.Name = formname; page1.Text = formname; page1.Controls.Add(queryform); tabControl1.Controls.Add(page1); queryform.Show(); tabControl1.SelectedTab = page1; } private void MemuView_AfterSelect(object sender, TreeViewEventArgs e) { if (checkequal(MemuView.SelectedNode.Name) || MemuView.SelectedNode.Name == "MemsRoot") { } else { creatform(MemuView.SelectedNode.Name); } } } }

    转载请注明原文地址: https://ju.6miu.com/read-1210779.html
    最新回复(0)