1、优化LOG显示与引用

2、添加PMA工具,工具内容待完善
3、修复流程树显示
4、添加开源项目,优化UI空间
5、其他BUG更改
This commit is contained in:
liu.wenjie
2021-11-23 15:51:37 +08:00
parent 47f77f5e64
commit a24dda2525
474 changed files with 91916 additions and 6429 deletions

View File

@@ -0,0 +1,396 @@
// ***********************************************************************
// Assembly : HZH_Controls
// Created : 08-15-2019
//
// ***********************************************************************
// <copyright file="UCMenu.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHubhttps://github.com/kwwwvagaa/NetWinformControl
// giteehttps://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace HZH_Controls.Controls
{
/// <summary>
/// Class UCMenu.
/// Implements the <see cref="System.Windows.Forms.UserControl" />
/// </summary>
/// <seealso cref="System.Windows.Forms.UserControl" />
public partial class UCMenu : UserControl
{
/// <summary>
/// 选中项事件
/// </summary>
public event EventHandler SelectedItem;
/// <summary>
/// The m parent item type
/// </summary>
private Type m_parentItemType = typeof(UCMenuParentItem);
/// <summary>
/// 父类节点类型
/// </summary>
/// <value>The type of the parent item.</value>
/// <exception cref="System.Exception">节点控件没有实现IMenuItem接口</exception>
/// <exception cref="Exception">节点控件没有实现IMenuItem接口</exception>
public Type ParentItemType
{
get { return m_parentItemType; }
set
{
if (value == null)
return;
if (!typeof(IMenuItem).IsAssignableFrom(value) || !value.IsSubclassOf(typeof(Control)))
throw new Exception("节点控件没有实现IMenuItem接口");
m_parentItemType = value;
}
}
/// <summary>
/// The m children item type
/// </summary>
private Type m_childrenItemType = typeof(UCMenuChildrenItem);
/// <summary>
/// 子类节点类型
/// </summary>
/// <value>The type of the children item.</value>
/// <exception cref="System.Exception">节点控件没有实现IMenuItem接口</exception>
/// <exception cref="Exception">节点控件没有实现IMenuItem接口</exception>
public Type ChildrenItemType
{
get { return m_childrenItemType; }
set
{
if (value == null)
return;
if (!typeof(IMenuItem).IsAssignableFrom(value) || !value.IsSubclassOf(typeof(Control)))
throw new Exception("节点控件没有实现IMenuItem接口");
m_childrenItemType = value;
}
}
/// <summary>
/// The m parent item styles
/// </summary>
private Dictionary<string, object> m_parentItemStyles;
/// <summary>
/// 父类节点样式设置key属性名称value属性值
/// </summary>
/// <value>The parent item styles.</value>
public Dictionary<string, object> ParentItemStyles
{
get { return m_parentItemStyles; }
set { m_parentItemStyles = value; }
}
/// <summary>
/// The m children item styles
/// </summary>
private Dictionary<string, object> m_childrenItemStyles;
/// <summary>
/// 子类节点样式设置key属性名称value属性值
/// </summary>
/// <value>The children item styles.</value>
public Dictionary<string, object> ChildrenItemStyles
{
get { return m_childrenItemStyles; }
set { m_childrenItemStyles = value; }
}
/// <summary>
/// The m data source
/// </summary>
private List<MenuItemEntity> m_dataSource;
/// <summary>
/// 数据源
/// </summary>
/// <value>The data source.</value>
public List<MenuItemEntity> DataSource
{
get { return m_dataSource; }
set
{
m_dataSource = value;
ReloadItems();
}
}
/// <summary>
/// The m is show first item
/// </summary>
private bool m_isShowFirstItem = true;
/// <summary>
/// 是否自动展开第一个节点
/// </summary>
/// <value><c>true</c> if this instance is show first item; otherwise, <c>false</c>.</value>
public bool IsShowFirstItem
{
get { return m_isShowFirstItem; }
set { m_isShowFirstItem = value; }
}
/// <summary>
/// The m menu style
/// </summary>
private MenuStyle m_menuStyle = MenuStyle.Fill;
/// <summary>
/// 菜单样式
/// </summary>
/// <value>The menu style.</value>
public MenuStyle MenuStyle
{
get { return m_menuStyle; }
set { m_menuStyle = value; }
}
/// <summary>
/// The m LST parent items
/// </summary>
private List<Control> m_lstParentItems = new List<Control>();
/// <summary>
/// The m select parent item
/// </summary>
private IMenuItem m_selectParentItem = null;
/// <summary>
/// The m select children item
/// </summary>
private IMenuItem m_selectChildrenItem = null;
/// <summary>
/// The m pan children
/// </summary>
private Panel m_panChildren = null;
/// <summary>
/// Reloads the items.
/// </summary>
private void ReloadItems()
{
try
{
ControlHelper.FreezeControl(this, true);
this.Controls.Clear();
m_lstParentItems.Clear();
if (m_dataSource != null && m_dataSource.Count > 0)
{
foreach (var parent in m_dataSource)
{
IMenuItem parentItem = (IMenuItem)Activator.CreateInstance(m_parentItemType);
parentItem.DataSource = parent;
if (m_parentItemStyles != null)
parentItem.SetStyle(m_parentItemStyles);
parentItem.SelectedItem += parentItem_SelectedItem;
Control c = parentItem as Control;
c.Dock = DockStyle.Top;
if (parent.Childrens.Count <= 0)
{
parentItem.SetSelectedStyle(null);
}
this.Controls.Add(c);
this.Controls.SetChildIndex(c, 0);
m_lstParentItems.Add(c);
}
}
m_panChildren = new Panel();
if (m_menuStyle == HZH_Controls.Controls.MenuStyle.Fill)
{
m_panChildren.Dock = DockStyle.Fill;
m_panChildren.Height = 0;
}
else
{
m_panChildren.Dock = DockStyle.Top;
m_panChildren.Height = 0;
}
m_panChildren.AutoScroll = true;
this.Controls.Add(m_panChildren);
}
finally
{
ControlHelper.FreezeControl(this, false);
}
if (m_isShowFirstItem && m_lstParentItems != null && m_lstParentItems.Count > 0)
{
parentItem_SelectedItem(m_lstParentItems[0], null);
}
}
/// <summary>
/// Handles the SelectedItem event of the parentItem control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
void parentItem_SelectedItem(object sender, EventArgs e)
{
this.FindForm().ActiveControl = this;
IMenuItem item = sender as IMenuItem;
bool? blnNull = null;
if (m_lstParentItems.Contains(sender as Control))
{
if (m_selectParentItem != item)
{
if (m_selectParentItem != null)
{
m_selectParentItem.SetSelectedStyle((m_selectParentItem.DataSource == null || m_selectParentItem.DataSource.Childrens == null || m_selectParentItem.DataSource.Childrens.Count <= 0) ? blnNull : false);
}
m_selectParentItem = item;
m_selectParentItem.SetSelectedStyle((m_selectParentItem.DataSource == null || m_selectParentItem.DataSource.Childrens == null || m_selectParentItem.DataSource.Childrens.Count <= 0) ? blnNull : true);
SetChildrenControl(m_selectParentItem);
}
else
{
m_selectParentItem.SetSelectedStyle((m_selectParentItem.DataSource == null || m_selectParentItem.DataSource.Childrens == null || m_selectParentItem.DataSource.Childrens.Count <= 0) ? blnNull : false);
m_selectParentItem = null;
SetChildrenControl(m_selectParentItem, false);
}
}
else if (m_panChildren.Controls.Contains(sender as Control))
{
if (m_selectChildrenItem != item)
{
if (m_selectChildrenItem != null)
{
m_selectChildrenItem.SetSelectedStyle((m_selectParentItem.DataSource == null || m_selectParentItem.DataSource.Childrens == null || m_selectParentItem.DataSource.Childrens.Count <= 0) ? blnNull : false);
}
m_selectChildrenItem = item;
m_selectChildrenItem.SetSelectedStyle((m_selectParentItem.DataSource == null || m_selectParentItem.DataSource.Childrens == null || m_selectParentItem.DataSource.Childrens.Count <= 0) ? blnNull : true);
}
}
if (SelectedItem != null)
{
SelectedItem(sender, e);
}
}
/// <summary>
/// Sets the children control.
/// </summary>
/// <param name="menuitem">The menuitem.</param>
/// <param name="blnChildren">if set to <c>true</c> [BLN children].</param>
private void SetChildrenControl(IMenuItem menuitem, bool blnChildren = true)
{
try
{
ControlHelper.FreezeControl(this, true);
if (m_menuStyle == HZH_Controls.Controls.MenuStyle.Fill)
{
if (blnChildren)
{
Control cMenu = menuitem as Control;
int index = m_lstParentItems.IndexOf(cMenu);
for (int i = 0; i <= index; i++)
{
m_lstParentItems[i].Dock = DockStyle.Top;
this.Controls.SetChildIndex(m_lstParentItems[i], 1);
}
for (int i = index + 1; i < m_lstParentItems.Count; i++)
{
m_lstParentItems[i].Dock = DockStyle.Bottom;
this.Controls.SetChildIndex(m_lstParentItems[i], m_lstParentItems.Count);
}
m_panChildren.Controls.Clear();
int intItemHeigth = 0;
foreach (var item in menuitem.DataSource.Childrens)
{
IMenuItem parentItem = (IMenuItem)Activator.CreateInstance(m_childrenItemType);
parentItem.DataSource = item;
if (m_childrenItemStyles != null)
parentItem.SetStyle(m_childrenItemStyles);
parentItem.SelectedItem += parentItem_SelectedItem;
Control c = parentItem as Control;
if (intItemHeigth == 0)
intItemHeigth = c.Height;
c.Dock = DockStyle.Top;
m_panChildren.Controls.Add(c);
m_panChildren.Controls.SetChildIndex(c, 0);
}
//m_panChildren.MinimumSize = new Size(0, menuitem.DataSource.Childrens.Count * intItemHeigth);
}
else
{
m_panChildren.Controls.Clear();
foreach (var item in m_lstParentItems)
{
item.Dock = DockStyle.Top;
this.Controls.SetChildIndex(item, 1);
}
}
}
else
{
if (blnChildren)
{
Control cMenu = menuitem as Control;
int index = m_lstParentItems.IndexOf(cMenu);
this.Controls.SetChildIndex(m_panChildren, m_lstParentItems.Count - index - 1);
m_panChildren.Controls.Clear();
int intItemHeigth = 0;
foreach (var item in menuitem.DataSource.Childrens)
{
IMenuItem parentItem = (IMenuItem)Activator.CreateInstance(m_childrenItemType);
parentItem.DataSource = item;
if (m_childrenItemStyles != null)
parentItem.SetStyle(m_childrenItemStyles);
parentItem.SelectedItem += parentItem_SelectedItem;
Control c = parentItem as Control;
if (intItemHeigth == 0)
intItemHeigth = c.Height;
c.Dock = DockStyle.Top;
m_panChildren.Controls.Add(c);
m_panChildren.Controls.SetChildIndex(c, 0);
}
m_panChildren.Height = menuitem.DataSource.Childrens.Count * intItemHeigth;
}
else
{
m_panChildren.Controls.Clear();
m_panChildren.Height = 0;
}
}
}
finally
{
ControlHelper.FreezeControl(this, false);
}
}
/// <summary>
/// Initializes a new instance of the <see cref="UCMenu" /> class.
/// </summary>
public UCMenu()
{
InitializeComponent();
}
}
/// <summary>
/// Enum MenuStyle
/// </summary>
public enum MenuStyle
{
/// <summary>
/// 平铺
/// </summary>
Fill = 1,
/// <summary>
/// 顶部对齐
/// </summary>
Top = 2,
}
}