This repository has been archived by the owner on Sep 11, 2023. It is now read-only.
/
DrawHelper.cs
87 lines (78 loc) · 2.65 KB
/
DrawHelper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.ViewInfo;
using DevExpress.XtraTreeList.Nodes;
using System.Windows.Forms;
using System.Drawing;
namespace TreeListDrawImage
{
public class DrawHelper
{
TreeList fTreeList;
public void RegisterTreeList(TreeList treeList)
{
this.fTreeList = treeList;
SubscribeEvents();
}
public void RegisterTreeList(TreeList treeList, Image image)
{
RegisterTreeList(treeList);
Image = image;
}
public void Unregister() {
UnsubscribeEvents();
fTreeList = null;
}
public Image Image { get; set; }
public event EventHandler ImageClick;
private void SubscribeEvents()
{
fTreeList.CustomDrawNodeIndicator += treeList1_CustomDrawNodeIndicator;
fTreeList.Click += treeList1_Click;
fTreeList.MouseMove += treeList1_MouseMove;
}
private void UnsubscribeEvents() {
fTreeList.CustomDrawNodeIndicator -= treeList1_CustomDrawNodeIndicator;
fTreeList.Click -= treeList1_Click;
fTreeList.MouseMove -= treeList1_MouseMove;
}
private void treeList1_CustomDrawNodeIndicator(object sender, CustomDrawNodeIndicatorEventArgs e)
{
TreeList tree = sender as TreeList;
Brush backBrush = tree.ViewInfo.PaintAppearance.Row.GetBackBrush(e.Cache);
e.Cache.FillRectangle(backBrush, e.Bounds);
if (node == e.Node)
{
e.Cache.DrawImage(Image, e.Bounds.Location);
}
e.Handled = true;
}
private void treeList1_Click(object sender, EventArgs e)
{
TreeList tree = sender as TreeList;
Point pt = tree.PointToClient(Control.MousePosition);
var hitInfo = tree.CalcHitInfo(pt);
if (hitInfo.HitInfoType == HitInfoType.RowIndicator)
{
if (ImageClick != null)
ImageClick(this, EventArgs.Empty);
}
}
TreeListNode node;
private void treeList1_MouseMove(object sender, MouseEventArgs e)
{
TreeList tree = sender as TreeList;
var hitInfo = tree.CalcHitInfo(e.Location);
TreeListNode currentNode = hitInfo.Node;
if (currentNode != node)
{
tree.InvalidateNode(node);
node = currentNode;
tree.InvalidateNode(node);
}
}
}
}