1 先上效果图

导航树停靠在MDI窗体的左边,可拖动改变大小,打开的窗口在【窗口】菜单下有列表。
VS2010实现这个其实很简单,走了不少弯路,我直接上最简单的方案
2 先创建一个MDIForm
窗体的 isMdiContainer = true
3 窗体上放一个MenuStrip菜单 name = menuMDI
一级菜单 输入 【开始】name = startMenu、【窗口】 name = windowsMenuItem两项
【开始】项下增加【新建】name = newMenuItem【-】、 【退出】name=exitMenuItem
【窗口】项下增加【导航树】name = treeMenuItem
4 MDIForm窗体内放置一个TreeView控件treeView1,
其中 Dock = left
靠近treeView1再放置一个Splitter控件splitter1,不用任何代码就能拖动改变treeview的宽度。
5 Treeview控件的使用百度或自己脑补
以上设置和布局基本实现导航树 功能。
6 核心代码
6.1新建测试窗体
private void newMenuItem_Click(object sender, EventArgs e)
{
Form f = new Form();
ll = ll + 11;
f.Name = ll.ToString();
f.Text = f.Name;
f.MdiParent = this;
f.Show();
}
6.2 退出程序
private void exitMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
6.3 导航树开关
private void treeMenuItem_Click(object sender, EventArgs e)
{
if (treeView1.Visible)
{
treeView1.Visible = false;
treeMenuItem.Checked = false;
}
else {
treeView1.Visible = true;
treeMenuItem.Checked = true;
}
}
7 全部代码
using System;
using System.Windows.Forms;
using System.Reflection;
using AppUI.SDI;
using System.Data;
using BLL;
namespace AppUI
{
public partial class MDIForm : Form
{
public MDIForm()
{
InitializeComponent();
}
//全部菜单项
DataTable dt = null;
private void MDIForm_Load(object sender, EventArgs e)
{
dt = BLLsysMemu.Select();
//创建treeview根节点
TreeNode tn0 = treeView1.Nodes.Add("我的导航");
tn0.ImageIndex = 0;
tn0.SelectedImageIndex = 0;
//TreeNode tn1 = new TreeNode("基础数据");
//tn1.Tag = "1000";
//TreeNode tn2 = new TreeNode("业务数据");
//tn2.Tag = "2000";
//TreeNode tn3 = new TreeNode("系统管理");
//tn3.Tag = "9000";
//tn0.Nodes.Add(tn1);
//tn0.Nodes.Add(tn2);
//tn0.Nodes.Add(tn3);
TreeNode tn1 = null;
for (int r = 0; r < dt.Rows.Count; r++ )
{
string name, pid;
pid = dt.Rows[r]["menu_id"].ToString();
name = dt.Rows[r]["menu_name"].ToString();
if (pid.Substring(1) == "000") {
tn1 = new TreeNode(name);
tn1.ImageIndex = 1;
tn1.SelectedImageIndex = 2;
tn0.Nodes.Add(tn1);
}
else{
TreeNode tn2 = new TreeNode(name);
tn2.Tag = pid;
tn2.ImageIndex = 3;
tn2.SelectedImageIndex = 4;
tn1.Nodes.Add(tn2);
}
}
treeView1.ExpandAll();
}
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
string formName = ""; //要打开的窗体:命名空间.类名
TreeNode tn = e.Node;
string tag = (string)tn.Tag;
if (string.IsNullOrEmpty(tag)) return;
//if (tag == "1000") formName = "JIC";
//else if (tag == "2000") formName = "YEW";
//else if (tag == "9000") formName = "XIT";
//else return;
Assembly assembly = Assembly.GetExecutingAssembly();
// 实例化窗体
//formName = "AppUI.SDI." + formName;
formName = dt.Select("menu_id = '" + tag + "'")[0]["s_form"].ToString();
Form form = assembly.CreateInstance(formName) as Form;
string ftext = dt.Select("menu_id = '" + tag + "'")[0]["menu_name"].ToString();
form.Text = tag + ftext;
ShowForm(form);
}
private void ShowForm(Form sdi) //在pane2里打开窗体
{
//this.splitContainer1.Panel2.Controls.Clear();
//sdi.FormBorderStyle = FormBorderStyle.FixedDialog;
sdi.FormBorderStyle = FormBorderStyle.None;
sdi.FormBorderStyle = FormBorderStyle.SizableToolWindow;
sdi.Dock = DockStyle.Fill;
sdi.TopLevel = false;
//sdi.Parent = this.splitContainer1.Panel2;
//this.splitContainer1.Panel2.Controls.Add(sdi);
sdi.BringToFront();
sdi.Show();
}
private void MDIForm_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
long ll = 0;
private void newMenuItem_Click(object sender, EventArgs e)
{
Form f = new Form();
ll = ll + 11;
f.Name = ll.ToString();
f.Text = f.Name;
f.MdiParent = this;
f.Show();
}
private void treeMenuItem_Click(object sender, EventArgs e)
{
if (treeView1.Visible)
{
treeView1.Visible = false;
treeMenuItem.Checked = false;
}
else {
treeView1.Visible = true;
treeMenuItem.Checked = true;
}
}
private void exitMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
网友评论