随着节点功能越来越多,我们的左侧菜单出现一页显示不下的情况,这时需要对菜单做下分组,然后可以分组显示与隐藏,如图。

已经出现了滚动条。
优化后效果图:

对菜单进行分组,并且点击分组时进行组内显示与隐藏,用到的控件有FlowLayoutPanel,Button,思路是将按钮分组循环加载到flowPanel中,同时加载时获取组内按钮进行加载,然后加组按钮与组内按钮集合进行绑定,添加组按钮点击事件实现 组内的显示与隐藏。代码如下:
Dictionary
///
/// 工具栏
///
private async void LoadToolButtonAsync()
{
// 获取分组进行分组加载
var toolGroup = VisionTaskService.GetToolGroupData();
var toolNodes = await VisionTaskService.LoadNodeButtonAsync();
FlowPanelToolMenu.Controls.Clear();
foreach (var group in toolGroup) {
var currentNodes = toolNodes.Where(x => x.GroupType == group.Key).OrderBy(x => x.Id).ToList();
if (currentNodes.IsListNullOrEmpty() == false) {
if (currentNodes.Count > 1)
{
Button button = new Button();
button.FlatStyle = FlatStyle.Flat;
button.Text = group.Value;
button.Width = 160;
button.Tag = group.Key;
button.Height = 30;
button.ForeColor = Color.White;
button.BackColor = ColorTranslator.FromHtml("#2775b6");
button.Click += ToolButton_Click;
FlowPanelToolMenu.Controls.Add(button);
List
}
else {
LoadToolButton(currentNodes.FirstOrDefault());
}
}
}
Button LoadToolButton(BasicToolNodeEntity tool){
Button button = new Button();
button.FlatStyle = FlatStyle.Flat;
button.Text = tool.Name;
button.Tag = tool;
button.Width = 150;
//button.AllowDrop = true;
button.MouseDown += ToolButton_MouseDown;
button.Height = 40;
button.ForeColor = Color.White;
button.BackColor = ColorTranslator.FromHtml("#7a7374");
//button.Click += ToolButton_Click;
button.ImageAlign = ContentAlignment.MiddleLeft;
button.Image = VisionTaskService.GetButtonImage(tool.Code);
FlowPanelToolMenu.Controls.Add(button);
return button;
}
ToolFlowNodeMenuDelete.Click += ToolFlowNodeMenuDelete_Click;
PanelNodeLog.AutoScroll = true;
SplitPreview.SplitterDistance = SplitPreview.Height - 230;
SplitPanelMain.SplitterWidth = 5;
SplitPreview.SplitterWidth = 5;
SplitPanelMain.SplitterDistance = 400;
this.CbxImageType.ValueMember = "Image";
CbxImageType.DisplayMember = "HImageTypeName";
CbxImageType.SelectedIndexChanged += CbxImageType_SelectedIndexChanged;
FlowPanelToolMenu.Padding = new Padding(20, 5, 0, 0);
}
private void ToolButton_Click(object sender, EventArgs e)
{
var btn = (Button)sender;
var gType = btn.Tag.ToInt();
if (groupButtons.ContainsKey(gType))
{
groupButtons[gType].ForEach(x =>
{
x.Visible = !x.Visible;
});
}
}