我想用自定义图片列表替换现有的ImageLists。
Public Class clsImageList
Public Images As New List(Of clsImageItem)
Public Sub Add(ByVal uGUID As String, ByRef uImage As Image)
Dim nItem As New clsImageItem(uImage, uGUID)
Images.Add(nItem)
End Sub
Public Function Image(ByVal uIndex As Integer) As Image
Return Images.Item(uIndex).Image
End Function
End Class
Public Class clsImageItem
Public ReadOnly Property [Image] As Image
Private _sGUID As String
Public Sub New(uImage As Image, uGUID As String)
Image = uImage
_sGUID = uGUID
End Sub
End Class
我正在尝试使我的类与.NET ImageList兼容,这样我就不必更改很多代码。
Using g As Graphics = Graphics.FromImage(SomeBitmap)
g.DrawImage(il.Images(myIndex), 0, 0, 256, 256)
End Using
我得到的错误是"此功能没有重载。"。
我确实理解了这个错误,它无法渲染我的clsImageItem,但我想知道我是否可以扩展Graphics来接受我的clsImageItem。
我必须更换
.il.Images(myIndex)
通过
.il.Images(myIndex).Image
还是有更简单/更方便的方式?
答案 0 :(得分:1)
您可以使用引用il.Images(myIndex).Image
中Images
列表的il
。
您可以使用引用il.Image(myIndex)
中Image
功能的il
。
我想知道我是否可以扩展Graphics以接受我的clsImageItem?
是的,您可以创建一个接受clsImageItem
类的扩展方法。
Imports System.Drawing
Imports System.Runtime.CompilerServices
Module GraphicsExtensions
<Extension()>
Public Sub DrawImage(ByVal g As Graphics, c As clsImageItem, x As Integer, y As Integer , w As Integer, h As integer)
g.DrawImage(c.Image, x, y, w, h)
End Sub
End Module
然后使用此重载,导入包含扩展方法的模块,然后您可以编写:
g.DrawImage(il.Images(myIndex), 0, 0, 256, 256)
有关扩展方法的更多信息
扩展方法使开发人员能够添加自定义功能 已定义的数据类型,但未创建新的派生 类型。扩展方法可以编写可以的方法 称它为现有类型的实例方法。