我正在尝试编写一个程序,该程序具有可扩展的图像源,可以随时添加图片。在我咬掉那个块之前,我只是试图通过自定义图像类进行测试,该图像类将在picturebox
对象之上保留一些额外的信息。我遇到的问题是,我的对象(oSlideItem
为clsSlideItem
)继承了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
基本上是我作为一个类写的结构,所以我可以有额外的功能。由于该部分代码正在运行,因此它并不属于此问题的范围。我没有把它包括在内,因为我不想弄乱这篇文章。
答案 0 :(得分:1)
看起来图片框永远不会被添加到表单控件集合中。添加此
Me.Controls.Add(oSlideItem)
之后
oSlideItem = New clsSlideItem
在将表单添加到Controls集合之前,控件将不会在表单上显示(或由表单包含)。我认为图像读得很好,只是它们没有显示在表格上。您可以通过在加载后设置断点并查看oSlideItem(Shift-F9)的属性来查看。