vb.net

2014-09-19 2 views
0

어떻게 내가 이름 BackgroundImage 같은 제어 속성에 할당 된 지역 자원을 얻을 수있는 컨트롤 속성에서 로컬 리소스의 이름을 알아?vb.net

예를 들어, 버튼이 있고 로컬 리소스 이미지에 BackgroundImage 속성을 설정했습니다. 내가 원하는 무엇

이름 그 버튼의 BackgroundImage에 할당 된 지역 자원를 얻을 수 런타임이다.

+0

양식의 .resx 파일에 저장된 리소스에는 식별자 이름이 없습니다. 컨트롤 이름을 기반으로하는 XML의 인코딩 된 이름. ApplyResource() 메서드는 인코딩 된 문자열에서 컨트롤 인스턴스를 찾는 방법을 알고 있습니다. .resx 파일을보십시오. 한 방향으로 만 작동합니다. 이것은 XY 질문입니다. –

+0

@HansPassant 다음은 무엇입니까? http://i.imgur.com/98u3des.png이 **는 ** 로컬 리소스의 이름입니다. 이것 (그림 참조)'a_button.BackgroundImage = My.Resources.error_button24BUTTON_DISABLED' 완벽하게 작동합니다. – Sharky

+0

글쎄, 그건 "로컬 리소스"아니에요. Image에서 My.Resources 속성으로 되돌아가는 기쁨은 거의 없지만 속성을 사용할 때마다 새 이미지 개체가 생성됩니다. XY 질문을 피하십시오, 이것은 단지 당신이 문제를 해결하고 싶을 방법이 아닙니다. 우리는 그 문제를 모른다. –

답변

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 

을 실제로 "생각하다"라고 생각했던 방식으로 작동하거나 Reflection을 통해 가져 오는 데 의도가있는 경우 리소스 "키"를 만들기 위해 Enabled에서 "True"를 "BUTTON_ENABLED"로 변환하려면 이와 같은 작업을 수행해야합니다.

몇 가지 대안이 있습니다. 하나는 ExtenderProvider가 작업중인 컨트롤에 대한 다양한 상태의 이미지를 제공하기 위해 작성을 서브 클래 싱하거나 익스텐더와 같은 로컬 사전/해시를 사용하는 수 있습니다 것 :

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) 

그것은 만약 간단한 것보다 더 복잡 성명서를 읽지 만, 당신이 찾고있는 것처럼 보이게됩니다.

+0

본인의 원래 목표를 포함하도록 내 질문에 다시 문구를 적용해야합니다 (의견을 읽지 않아도 의문이 생길 수 있음). 나중에 수행하고 답변을 수락합니다. 감사합니다. – Sharky