This repository has been archived by the owner on Sep 19, 2023. It is now read-only.
/
CustomControlPainter.vb
58 lines (52 loc) · 1.96 KB
/
CustomControlPainter.vb
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
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports DevExpress.XtraEditors.Drawing
Imports DevExpress.XtraEditors
Imports System.Windows.Forms
Imports DevExpress.XtraEditors.Repository
Imports DevExpress.XtraEditors.ViewInfo
Imports System.Drawing
Namespace CustomControlInGrid
Friend Class CustomControlPainter
Inherits BaseEditPainter
Public Sub New()
MyBase.New()
End Sub
Public Overrides Sub Draw(ByVal info As ControlGraphicsInfoArgs)
MyBase.Draw(info)
Dim vi As CustomControlViewInfo = TryCast(info.ViewInfo, CustomControlViewInfo)
Dim cri As CustomRepositoryItem = TryCast(vi.Item, CustomRepositoryItem)
If cri.ControlType Is Nothing Then
Return
End If
TryCast(cri.DrawControl, IEditValue).EditValue = vi.EditValue
cri.DrawControl.Bounds = info.Bounds
Dim bm As New Bitmap(info.Bounds.Width, info.Bounds.Height)
cri.DrawControl.DrawToBitmap(bm, New Rectangle(0, 0, bm.Width, bm.Height))
info.Graphics.DrawImage(bm, info.Bounds.Location)
Dim editors As New List(Of BaseEdit)()
editors = EditorFinder.FindEditors(cri.DrawControl)
DrawEditors(editors, info, cri)
End Sub
Private Sub DrawEditors(ByVal editors As List(Of BaseEdit), ByVal info As ControlGraphicsInfoArgs, ByVal cri As CustomRepositoryItem)
For Each editor As BaseEdit In editors
Dim ri As RepositoryItem = cri.ControlRepositories(editor.EditorTypeName)
ri.Assign(editor.Properties)
Dim bevi As BaseEditViewInfo = ri.CreateViewInfo()
bevi.EditValue = editor.EditValue
Dim rec As Rectangle = editor.Bounds
rec.X += info.ViewInfo.Bounds.X
rec.Y += info.ViewInfo.Bounds.Y
bevi.CalcViewInfo(info.Graphics, MouseButtons.Left, New Point(0, 0), rec)
Dim cinfo As New ControlGraphicsInfoArgs(bevi, info.Cache, info.ViewInfo.Bounds)
Dim bp As BaseEditPainter = ri.CreatePainter()
Try
bp.Draw(cinfo)
Catch
End Try
Next editor
End Sub
End Class
End Namespace