csharp 写一个UI调度框架 可以支持项目树节点的切换引起中间编辑区以及菜单栏的变化
时间: 2024-05-05 14:16:12 浏览: 27
下面是一个简单的UI调度框架,支持项目树节点的切换引起中间编辑区以及菜单栏的变化。
```csharp
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace UI框架
{
public class ProjectTreeNode
{
public string Name { get; set; }
public List<ProjectTreeNode> Children { get; set; }
}
public class UIController
{
private ProjectTreeNode _currentNode;
private readonly TreeView _projectTreeView;
private readonly Control _editControl;
private readonly MenuStrip _menuStrip;
public UIController(TreeView projectTreeView, Control editControl, MenuStrip menuStrip)
{
_projectTreeView = projectTreeView;
_editControl = editControl;
_menuStrip = menuStrip;
_projectTreeView.AfterSelect += ProjectTreeViewOnAfterSelect;
}
private void ProjectTreeViewOnAfterSelect(object sender, TreeViewEventArgs e)
{
_currentNode = e.Node.Tag as ProjectTreeNode;
UpdateUI();
}
private void UpdateUI()
{
UpdateEditControl();
UpdateMenuStrip();
}
private void UpdateEditControl()
{
// 根据当前节点更新编辑区
_editControl.Text = _currentNode.Name;
}
private void UpdateMenuStrip()
{
// 根据当前节点更新菜单栏
_menuStrip.Items.Clear();
var fileMenuItem = new ToolStripMenuItem("文件");
fileMenuItem.DropDownItems.Add("新建");
fileMenuItem.DropDownItems.Add("打开");
fileMenuItem.DropDownItems.Add("保存");
fileMenuItem.DropDownItems.Add("另存为");
_menuStrip.Items.Add(fileMenuItem);
var editMenuItem = new ToolStripMenuItem("编辑");
editMenuItem.DropDownItems.Add("复制");
editMenuItem.DropDownItems.Add("剪切");
editMenuItem.DropDownItems.Add("粘贴");
_menuStrip.Items.Add(editMenuItem);
if (_currentNode.Children != null && _currentNode.Children.Count > 0)
{
var viewMenuItem = new ToolStripMenuItem("视图");
foreach (var childNode in _currentNode.Children)
{
var childMenuItem = new ToolStripMenuItem(childNode.Name);
childMenuItem.Tag = childNode;
childMenuItem.Click += ChildMenuItemOnClick;
viewMenuItem.DropDownItems.Add(childMenuItem);
}
_menuStrip.Items.Add(viewMenuItem);
}
}
private void ChildMenuItemOnClick(object sender, EventArgs e)
{
_currentNode = (sender as ToolStripMenuItem)?.Tag as ProjectTreeNode;
UpdateUI();
}
}
}
```
使用方法:
```csharp
var rootNode = new ProjectTreeNode
{
Name = "项目",
Children = new List<ProjectTreeNode>
{
new ProjectTreeNode {Name = "模块1"},
new ProjectTreeNode {Name = "模块2"},
new ProjectTreeNode {Name = "模块3"}
}
};
var projectTreeView = new TreeView();
projectTreeView.Nodes.Add(CreateTreeNode(rootNode));
var editControl = new TextBox {Dock = DockStyle.Fill};
var menuStrip = new MenuStrip();
var controller = new UIController(projectTreeView, editControl, menuStrip);
// 把TreeView、编辑区、菜单栏添加到窗口中
```
其中,`CreateTreeNode` 方法用于递归创建树节点:
```csharp
private static TreeNode CreateTreeNode(ProjectTreeNode node)
{
var treeNode = new TreeNode(node.Name);
treeNode.Tag = node;
if (node.Children != null)
{
foreach (var childNode in node.Children)
{
treeNode.Nodes.Add(CreateTreeNode(childNode));
}
}
return treeNode;
}
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)