* UITreeView: 垂直滚动条未显示时禁止鼠标滚轮滚动刷新
This commit is contained in:
parent
83ed1fe1c5
commit
3b65cf824d
Binary file not shown.
@ -1,4 +1,5 @@
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Sunny.UI
|
||||
{
|
||||
@ -33,4 +34,10 @@ namespace Sunny.UI
|
||||
Custom,
|
||||
None
|
||||
}
|
||||
|
||||
public class UITreeNodePainter
|
||||
{
|
||||
public Color BackColor;
|
||||
public Color ForeColor;
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
@ -56,6 +57,7 @@ namespace Sunny.UI
|
||||
SetStyleFlags(true, false);
|
||||
ShowText = false;
|
||||
view.HBar = HBar;
|
||||
view.Bar = Bar;
|
||||
SetScrollInfo();
|
||||
|
||||
view.BeforeCheck += View_BeforeCheck;
|
||||
@ -82,6 +84,35 @@ namespace Sunny.UI
|
||||
view.AfterLabelEdit += View_AfterLabelEdit;
|
||||
}
|
||||
|
||||
public void AddNodePainter(TreeNode node, Color backColor, Color foreColor)
|
||||
{
|
||||
if (view.IsNull()) return;
|
||||
if (view.Painter.ContainsKey(node))
|
||||
{
|
||||
view.Painter[node].BackColor = backColor;
|
||||
view.Painter[node].ForeColor = foreColor;
|
||||
}
|
||||
else
|
||||
{
|
||||
view.Painter.TryAdd(node, new UITreeNodePainter() { BackColor = backColor, ForeColor = foreColor });
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearNodePainter(TreeNode node)
|
||||
{
|
||||
if (view.IsNull()) return;
|
||||
if (view.Painter.ContainsKey(node))
|
||||
{
|
||||
view.Painter.TryRemove(node, out _);
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearAllNodePainter(TreeNode node)
|
||||
{
|
||||
if (view.IsNull()) return;
|
||||
view.Painter.Clear();
|
||||
}
|
||||
|
||||
[Description("节点点击时同步父节点和子节点的状态"), Category("SunnyUI")]
|
||||
[DefaultValue(true)]
|
||||
public bool TreeNodeStateSync
|
||||
@ -132,7 +163,6 @@ namespace Sunny.UI
|
||||
KeyPress?.Invoke(this, e);
|
||||
}
|
||||
|
||||
|
||||
private void View_MouseLeave(object sender, EventArgs e)
|
||||
{
|
||||
MouseLeave?.Invoke(this, e);
|
||||
@ -581,11 +611,13 @@ namespace Sunny.UI
|
||||
|
||||
protected override void OnMouseWheel(MouseEventArgs e)
|
||||
{
|
||||
if (!ScrollBarVisible || !HScrollBarVisible) return;
|
||||
base.OnMouseWheel(e);
|
||||
|
||||
if (e.Delta > 10)
|
||||
ScrollBarInfo.ScrollUp(view.Handle);
|
||||
else if (e.Delta < -10) ScrollBarInfo.ScrollDown(view.Handle);
|
||||
else if (e.Delta < -10)
|
||||
ScrollBarInfo.ScrollDown(view.Handle);
|
||||
|
||||
SetScrollInfo();
|
||||
}
|
||||
@ -701,7 +733,6 @@ namespace Sunny.UI
|
||||
private void HBar_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
ScrollBarInfo.SetHorScrollValue(view.Handle, HBar.Value);
|
||||
//view.Invalidate();
|
||||
}
|
||||
|
||||
private void view_AfterExpand(object sender, TreeViewEventArgs e)
|
||||
@ -726,7 +757,10 @@ namespace Sunny.UI
|
||||
|
||||
internal class TreeViewEx : TreeView
|
||||
{
|
||||
public ConcurrentDictionary<TreeNode, UITreeNodePainter> Painter = new ConcurrentDictionary<TreeNode, UITreeNodePainter>();
|
||||
|
||||
public UIHorScrollBar HBar;
|
||||
public UIScrollBar Bar;
|
||||
|
||||
private TreeNode CurrentNode;
|
||||
|
||||
@ -1035,6 +1069,15 @@ namespace Sunny.UI
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Bar.Visible)
|
||||
{
|
||||
if (m.Msg == 522)
|
||||
{
|
||||
m.Result = IntPtr.Zero;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
base.WndProc(ref m);
|
||||
}
|
||||
|
||||
@ -1042,7 +1085,6 @@ namespace Sunny.UI
|
||||
|
||||
protected override void OnAfterCheck(TreeViewEventArgs e)
|
||||
{
|
||||
|
||||
base.OnAfterCheck(e);
|
||||
if (e.Action == TreeViewAction.ByMouse && TreeNodeStateSync) //鼠标点击
|
||||
{
|
||||
@ -1058,9 +1100,11 @@ namespace Sunny.UI
|
||||
private void SetParentNodeCheckedState(TreeNode currNode, bool ByMouse = false)
|
||||
{
|
||||
if (currNode.Parent == null)
|
||||
{
|
||||
return;
|
||||
TreeNode parentNode = currNode.Parent; //获得当前节点的父节点
|
||||
}
|
||||
|
||||
TreeNode parentNode = currNode.Parent; //获得当前节点的父节点
|
||||
var count = parentNode.Nodes.Cast<TreeNode>().Where(n => n.Checked).ToList().Count;
|
||||
|
||||
//判断节点Checked是否改变,只有改变时才赋值,否则不变更,以防止频繁触发OnAfterCheck事件
|
||||
@ -1093,7 +1137,6 @@ namespace Sunny.UI
|
||||
SetParentNodeCheckedState(parentNode, true); //递归调用
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//选中节点之后,选中节点的所有子节点
|
||||
|
Loading…
x
Reference in New Issue
Block a user