如何获取已分配给BackgroundImage
等控件属性的本地资源的名称?
例如,我有一个按钮,我已将BackgroundImage
属性设置为本地资源图像。
我想要的是运行时,以获取已分配给BackgroundImage
的本地资源的名称那个按钮。
答案 0 :(得分:1)
如果你看一下你的形象:
您可以看到有关资源处理方式的两件事。首先,返回值为Bitmap
,因此一旦分配给按钮或其他任何内容,您将很难确定图像数据的来源。第二件事是标识符实际上是Properties
,而不仅仅是标记或集合中的密钥。 IDE在您的Resources.Designer.vb
文件中生成这些文件,以提供对各种资源的访问。以下是从资源设计器文件中获取法国标志位图的接口:
Friend ReadOnly Property FRFlag() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("FRFlag", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
你会有像Property error_button24BUTTON_DISABLED
这样的东西。与任何其他属性一样,属性的名称不是返回的一部分,只是与它们关联的数据。
因为真正重要的是按钮的状态,而不是显示的图像,并且启用状态非常容易评估,使用if语句不会丢失太多:
If thisButton.Enabled Then
thisButton.BackGroundImage = My.Resources...
Else
thisButton.BackGroundImage = My.Resources...
End If
你必须做这样的事情才能将Enabled的“True”转换为“BUTTON_ENABLED”以创建资源“key”,如果它实际上按照您的想法运行,或者是想通过Reflection获取它。
有几种选择。一种可能是编写一个ExtenderProvider
来为你正在使用的控件提供各种状态图像,将它们子类化,或者像Extender一样使用本地Dictionary / HashTable:
Friend Class ButtonImages
' ToDo: load these from My.Resources in the ctor for a given button
' ...
Private Property EnabledImage
Private Property DisabledImage
Public Function GetStateImage(b As Boolean) As Bitmap
If b Then
Return EnabledImage
Else
Return DisabledImage
End If
End Function
End Class
Private myBtnImgs As New Dictionary(of Button, ButtonImages)
thisButton.BackgroundImage = myBtnImgs(thisButton).GetStateImage(thisButton.Enabled)
它比简单的If语句更具参与性,但接近你似乎一直在寻找的东西。