2016-07-13 5 views
2

다음과 같이 확장 된 버튼 클래스가 있습니다.버튼 툴팁이 지역화되지 않음

class ExtendedButton : Button 
{ 
    private ToolTip _tooltip = new ToolTip(); 

    public ExtendedButton() 
    { 
     _tooltip.SetToolTip(this, StringResources.MyLocalizedTooltipString); 
    } 
} 

는 위의 코드에서, 'StringResources.MyLocalizedTooltipString는'다양한 언어에 대한 문자열을 포함합니다. 그러나 스레드 문화를 변경하면 툴팁 텍스트가 변경되지 않습니다. 그것을 성취하는 방법? 도움이 될 것입니다.

+0

스레드 문화를 어떻게 바꿀 수 있습니까? –

답변

2

정상입니다. SetToolTip 메서드는 문자열을 받아들이고 SetToolTip을 호출 할 때 현재 문화권을 기반으로 리소스에서 추출한 텍스트를 표시하고 런타임에 문화권을 변경해도 영향을 미치지 않습니다. 버튼의 생성자에서 툴팁 설정이 수행되므로 그 시점의 스레드 문화가 사용됩니다. 당신이 당신의 툴팁이 동적으로 automatially 현재의 문화를 사용하는 옵션으로 사용하면 툴팁과 같은 더미 텍스트를 설정할 수 있습니다 (툴팁을 활성화) 다음 툴팁의 Popup 이벤트를 처리하려면

는 툴팁에 지역화 된 값을 할당 :

class ExtendedButton : Button 
{ 
    private ToolTip _tooltip = new ToolTip(); 

    public ExtendedButton() 
    { 
     _tooltip.Popup += new PopupEventHandler(_tooltip_Popup); 
     _tooltip.SetToolTip(this, "DUMMYTEXT"); 
    } 

    void _tooltip_Popup(object sender, PopupEventArgs e) 
    { 
     if (_tooltip.GetToolTip(this) != StringResources.MyLocalizedTooltipString) 
      _tooltip.SetToolTip(this, StringResources.MyLocalizedTooltipString); 
    } 
} 

참고 : 목표는 동적 지역화 도구 설명을하지 않고 당신은 단지 지역화 도구 설명, Form 작품의 Localizable 속성은, 당신의 ExtendedButton 구성 요소의 디자이너로 이동 trueLocalizable 속성을 설정하고 사용하는 방법을 원하는 경우 다른 cltures에 대한 다른 툴팁 텍스트.

그러나 구성 요소를 만든 후 런타임에 값을 dunamically 변경할 수는 없습니다. 여기

은 예입니다

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fa-IR"); 
var f = new Form(); 
f.Controls.Add(new ExtendedButton()); 
f.Show(); 
+0

답변에 대한 질문이 있으면 알려주십시오. 필자는 코드와 런타임 동적 지역화를 테스트했으며 구성 요소의 변경 내용을 사용하여 올바르게 작동합니다. 테스트를하려면 StringResources.resx와 다른 하나 (예 : StringResources.fa-IR.resx)가 충분하고 버튼이 포함 된 양식을 표시하십시오. 그런 다음 런타임에 'CurrentUICulture'를 변경하고 결과를 확인하십시오. –

+0

감사합니다. 이것은 완벽하게 작동합니다. –

+0

당신은 환영합니다 :) 희망을 얻었 으면합니다. –

0

종합적 문화를 설정하려면, 현재 스레드에 대한 CurrentCultureCurrentUICulture을 설정해야합니다, 당신은 응용 프로그램에서 새로운 스레드를 만들려고하는 경우에, DefaultThreadCurrentCultureDefaultThreadCurrentUICulture. 예를 들어

:

var frenchCulture = new CultureInfo("fr-FR"); 

Thread.CurrentThread.CurrentCulture = frenchCulture; 
Thread.CurrentThread.CurrentUICulture = frenchCulture; 
CultureInfo.DefaultThreadCurrentCulture = frenchCulture; 
CultureInfo.DefaultThreadCurrentUICulture = frenchCulture; 

는 어떤 형태가로드되기 전에 프로그램의 Main 방법으로 수행되어야하며 Application.Run 전에 호출된다. 기본 스레드의 UI 문화의 설정에 관한 MSDN에서

:

명시 적으로 설정하지 않는 한, DefaultThreadCurrentUICulture 속성의 값이 null이며,하지 않은 응용 프로그램 도메인의 모든 스레드의 현재 문화 명시 적 문화권이 할당 된 기본 Windows 시스템 문화권에 의해 정의됩니다.

+0

구성 요소를 만든 후 런타임에 툴팁 값을 동적으로 변경할 수 없습니다. 이 값을 얻으려면 버튼이 생성 된 순간의 문화를 기반으로 생성자에서 추출됩니다. –

+0

main 메소드에서 호출 할 필요는 없습니다. 양식을 보여주기 전에 호출하는 것으로 충분합니다. 그러면 폼은 UI 문화권으로'Thread.CurrentThread.CurrentUICulture'를 사용할 것입니다. 또한 CurrentUICulture보다 다른 속성을 설정하는 것은 여기에 점이 없다. –

관련 문제