通过扩展图像属性创建自定义ImageList类

时间:2016-01-09 21:49:41

标签: .net vb.net winforms gdi+ imagelist

我想用自定义图片列表替换现有的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 

还是有更简单/更方便的方式?

1 个答案:

答案 0 :(得分:1)

您可以使用引用il.Images(myIndex).ImageImages列表的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)

有关扩展方法的更多信息

  

扩展方法使开发人员能够添加自定义功能   已定义的数据类型,但未创建新的派生   类型。扩展方法可以编写可以的方法   称它为现有类型的实例方法。