vb.net从control属性获取本地资源名称

时间:2014-09-19 13:27:01

标签: vb.net

如何获取已分配给BackgroundImage等控件属性的本地资源名称

例如,我有一个按钮,我已将BackgroundImage属性设置为本地资源图像。

我想要的是运行时,以获取已分配给BackgroundImage本地资源名称那个按钮。

1 个答案:

答案 0 :(得分:1)

如果你看一下你的形象:

enter image description here

您可以看到有关资源处理方式的两件事。首先,返回值为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语句更具参与性,但接近你似乎一直在寻找的东西。