如何在继承图片框的自定义对象上加载图像?

时间:2013-01-31 04:52:53

标签: vb.net inheritance picturebox

我正在尝试编写一个程序,该程序具有可扩展的图像源,可以随时添加图片。在我咬掉那个块之前,我只是试图通过自定义图像类进行测试,该图像类将在picturebox对象之上保留一些额外的信息。我遇到的问题是,我的对象(oSlideItemclsSlideItem)继承了picturebox似乎并未在运行时加载图片。我尝试了两种不同的方法,这些方法在帮助和论坛中提到,我似乎无法在运行时获取图片。我没有找到任何提及我继承picturebox的具体情况的内容。

我在加载图片之前尝试设置图像位置和大小属性,没有改变任何内容。

我是否需要执行一些额外步骤来启动图片框图像,因为我在继承状态而不是原生图片框对象中使用该功能?

我也将这些图像保持对象放入集合中,如您所见。我测试加载图片而不将其放入集合中,没有任何改变,所以我不认为这是问题。我假设一旦我将一个对象添加到集合中,集合中的对象和集合外部的对象就会解耦。我还没有做好测试。

Public Class clsSliders
Private clFeedItems As New Collection 'collection of all feed items
Private oFeed As New clsFeed 'feed organizer layer

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'build Feed
    Dim oSlideItem As clsSlideItem 'feed item layer

    'make collection of slider objects
    oSlideItem = New clsSlideItem
    oSlideItem.setRank(1, oFeed)
    oSlideItem.ImageLocation = "C:\Users\nathan\Pictures\Chicago_River_from_Lake_Street_bridge.jpg"
    oSlideItem.Load()

    clFeedItems.Add(oSlideItem, 1)

    oSlideItem = New clsSlideItem
    oSlideItem.Image = Image.FromFile("C:\Users\nathan\Pictures\ReindeerPowerLines.png")
    oSlideItem.setRank(2, oFeed)

    'add to collection
    clFeedItems.Add(oSlideItem, 2)

    oSlideItem = New clsSlideItem
    oSlideItem.Image = Image.FromFile("C:\Users\nathan\Pictures\TianmenMountain.jpg")
    oSlideItem.setRank(3, oFeed)

    'add to collection
    clFeedItems.Add(oSlideItem, 3)

End Sub

'other subs and properties
End Class

和我的第二堂课:

Public Class clsSlideItem
Inherits PictureBox

Private iFeedRank As Integer 'current rank position

Public Sub setRank(rank As Integer, oFeed As clsFeed)
    If Not IsNothing(oFeed) Then
        Me.Left = oFeed.Left(rank)
        Me.Top = oFeed.Top(rank)
        Me.Width = oFeed.Width(rank)
        Me.Height = oFeed.Height(rank)
        iFeedRank = rank
    End If
End Sub

'other subs and properties
End Class

oFeed因为clsFeed基本上是我作为一个类写的结构,所以我可以有额外的功能。由于该部分代码正在运行,因此它并不属于此问题的范围。我没有把它包括在内,因为我不想弄乱这篇文章。

1 个答案:

答案 0 :(得分:1)

看起来图片框永远不会被添加到表单控件集合中。添加此

Me.Controls.Add(oSlideItem)

之后

oSlideItem = New clsSlideItem

在将表单添加到Controls集合之前,控件将不会在表单上显示(或由表单包含)。我认为图像读得很好,只是它们没有显示在表格上。您可以通过在加载后设置断点并查看oSlideItem(Shift-F9)的属性来查看。