2009-12-03 5 views
11

WinForms 응용 프로그램을 여러 언어로 현지화하려고합니다. 디자이너 (프로그램 적으로 설정하는 코드 덩어리를 유지하는 대신) 디자이너에서 리소스 파일을 읽을 수 있도록 양식 레이블/단추 텍스트 속성을 설정하는 방법을 찾으려고합니다.리소스 파일의 WinForms 문자열 디자이너에서 배선 됨

form.Localizable = true를 설정할 수 있지만 양식과 함께 파일에서 자원을 읽을 수 있지만 다수의 양식간에 공유됩니다.

디자이너의 레이블 텍스트를 프로젝트 수준의 resx 파일에 저장된 값으로 설정할 수있는 방법이 있습니까?

+0

디자이너에서이 작업을 수행 할 때 필요한 것은 무엇입니까? 코드에서이 작업을 최소화하려는 노력. – Walter

+0

행운이 있었나요? 나는 이것을 필요로한다. 모든 양식을 단일 리소스 파일에 바인딩하고 싶습니다. –

+0

슬프게도. 나는 코드에서 물건을 많이 배선하고있다 : ( –

답변

0

내가 생각할 수있는 유일한 방법은 리소스 이름에 대한 속성을 추가하는 사용자 지정 컨트롤을 만드는 것입니다. 속성이 설정되면 프로젝트 리소스 파일에서 값을 가져 와서 텍스트 속성을 설정합니다. Text가 직렬화되지 않도록하거나 ResourceName으로 설정된 값을 덮어 쓸 수 있습니다.

public class ResourceLabel 
    : Label 
{ 
    private string mResourceName; 
    public string ResourceName 
    { 
     get { return mResourceName; } 
     set 
     { 
      mResourceName = value; 
      if (!string.IsNullOrEmpty(mResourceName)) 
       base.Text = Properties.Resources.ResourceManager.GetString(mResourceName); 
     } 
    } 

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public override string Text 
    { 
     get { return base.Text; } 
     set 
     { 
      // Set is done by resource name. 
     } 
    } 
} 
+0

나는 비슷한 것에 대해 생각했지만 파일 당 하나의 resx를 갖거나 코드에서 설정하는 것보다 더 불쾌한 것 같다. 내장형이 없다는 것에 실망했다. 이 작업을 수행하는 방법은 Localizable 속성과 함께 존재하는 것에서 만 약간의 조정이 가능한데 Resx 파일 속성도 필요합니다! ( –

3

은 내가 할 수있는 방법을 찾은 것 같아요!

먼저 Resources.resx에서 액세스 한정자를 Public으로 설정하십시오. '

this.footerLabel.Text = Properties.Resources.footerString; 

ps.:I 돈 : 예를 들어

this.<control>.Text = Properties.Resources.<stringname> 

: 디자이너의 그 후

는 적절한 컨트롤이 쓸 수 코드 (Form.Designer.cs를) 생성 이 솔루션이 얼마나 윤리적인지는 알지만 작동합니다!

+3

이것은 정확히 피하려고했던 것입니다. 프로그래밍 방식으로 설정하는 코드 덩어리 " –

관련 문제