和上一页不同的是,增加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);
}
}
}
}