利用NavMenu组件与TabControl添加页面
using Sunny.UI;
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;
using Sunny;
using DianwoManage.Bussiness;
namespace DianwoManage
{
public partial class Main : UIForm
{
public Main()
{
InitializeComponent();
InitMain();
}
public void InitMain()
{
int pageIndex = 100;
TreeNode parent = Menu.CreateNode("一项",pageIndex);
Menu.CreateChildNode(parent,"条目1",++pageIndex);
Menu.CreateChildNode(parent, "条目2", ++pageIndex);
pageIndex = 200;
parent = Menu.CreateNode("二项", pageIndex);
Menu.CreateChildNode(parent, "条目3", ++pageIndex);
Menu.CreateChildNode(parent, "条目4", ++pageIndex);
}
int[] index = { 0,0,0,0,0,0,0,0,0,0};
private void Menu_MenuItemClick(TreeNode node, NavMenuItem item, int pageIndex)
{
if(!index.Contains(0))
{
MessageBox.Show("最多只能打开10个页面!");
}
int indexnum = -1;
if (IsExit(pageIndex,ref indexnum))
{
Tab.SelectedIndex=indexnum;
return;
}
switch (pageIndex)
{
case 101:
//Tab.AddPage(new 你好());
break;
case 102:
Tab.AddPage(new Form2());
break;
case 201:
Tab.AddPage(new Form3());
break;
case 202:
Tab.AddPage(new Form4());
break;
}
Tab.SelectedIndex = indexnum;
}
public bool IsExit(int pageindex,ref int num)
{
if (index.Contains(pageindex))
{
for (int i = 0; i < 10; i++)
{
if (index[i] == pageindex)
{
num = i;
return true; }
}
}
for(int i=0;i<10; i++)
{
if(index[i]==0)
{
num = i;
index[i] = pageindex;
break;
}
}
return false;
}
private bool uiTabControl1_BeforeRemoveTabPage(object sender, int ind)
{
index[ind]= 0;
for (int i = 0; i < 10; i++)
{
if (index[i] == 0&&i<9)
{
int temp = index[i];
index[i] = index[i+1];
index[i + 1] = temp;
}
}
return true;
}
}
}
效果图
功能:当点击左侧选项卡其中一条,右侧视图会将该选项卡设置为展示页面,会判断是否重复选择,不显示重复页面,该图,我将增加页面都设为了form2,因此都显示的form2的内容。
第二种方法
NavMenuItem样式:
public NavMenuItem(string text, int pageIndex,string tag)
{
PageIndex = pageIndex;
Text = text;
Tag = tag;
}
public Main()
{
InitializeComponent();
InitMain();
}
public void InitMain()
{
int pageIndex = 100;
int pageIndex = 100;
TreeNode parent = Menu.CreateNode("一项",pageIndex,"dpxx");
Menu.CreateChildNode(parent,"条目1",++pageIndex,"sjxx");
Menu.CreateChildNode(parent, "条目2", ++pageIndex,"wdxx");
pageIndex = 200;
parent = Menu.CreateNode("二项", pageIndex);
Menu.CreateChildNode(parent, "条目3", ++pageIndex);
Menu.CreateChildNode(parent, "条目4", ++pageIndex);
Menu.SelectFirst();
}
private void Menu_MenuItemClick(TreeNode node, NavMenuItem item, int pageIndex)
{
if (item != null&&item.Tag!=null)
{
string menuText = item.Text;
foreach (TabPage tab in Tab.TabPages)
{
if (tab.Text == menuText)
{
Tab.SelectedTab = tab;
return;
}
}
string assemblyPath = AppDomain.CurrentDomain.BaseDirectory + "DianwoManage.exe"; //得到动态库文件名
if (!File.Exists(assemblyPath))
{
MessageBox.Show("未找到文件:");
return;
}
Type type = null;
Assembly asm = Assembly.LoadFrom(assemblyPath);
Type[] t = asm.GetTypes();
foreach (Type ty in t)
{
if (ty.Name == item.Tag.ToString())
{
type = ty;
}
}
if (type == null)
{
MessageBox.Show("未找到模块:");
return;
}
LoadMdiForm(Tab, menuText, type);
}
}
private Form LoadMdiForm(TabControl MainTabControl, string menuText, Type formType)
{
Form frm = (Form)Activator.CreateInstance(formType);
frm.Text = menuText;
frm.TopLevel = false;
TabPage sTabPag = new TabPage(menuText);
sTabPag.Font = new Font("微软雅黑", 9F);
sTabPag.Controls.Add(frm);
MainTabControl.Controls.Add(sTabPag);
MainTabControl.SelectedTab = sTabPag;
frm.Show();
return frm;
}