2009-12-03 6 views
11

Ich versuche, eine WinForms-App für mehrere Sprachen zu lokalisieren. Ich versuche, eine Möglichkeit zu finden, meine Texteigenschaften für Formularbeschriftungen/-schaltflächen so einzustellen, dass sie aus der Ressourcendatei im Designer gelesen werden (anstatt einen Programmabschnitt zu verwalten, der sie programmatisch festlegt).WinForms Zeichenfolgen in Ressourcen-Dateien, verdrahtet in Designer

Ich habe festgestellt, ich kann form.Localizable = True, aber dann werden die Ressourcen aus einer Datei neben dem Formular gelesen, aber viele von mir sind über mehrere Formulare geteilt.

Gibt es eine Möglichkeit, den Text eines Labels im Designer auf einen Wert festzulegen, der in einer resx-Datei auf Projektebene gespeichert ist?

+0

Was ist die Notwendigkeit, dies im Designer zu tun? Der Aufwand, dies in Code minimal zu machen. – Walter

+0

Hattest du Glück dabei? Ich brauche das auch. Ich möchte, dass alle meine Formulare an eine einzelne Ressourcendatei binden. –

+0

Leider nicht. Ich bin eine Menge Sachen in Code verdrahten :( –

Antwort

0

Die einzige Möglichkeit, die ich mir vorstellen kann wäre, ein benutzerdefiniertes Steuerelement zu erstellen, das eine Eigenschaft für den Ressourcennamen hinzufügen würde. Wenn die Eigenschaft festgelegt ist, greifen Sie den Wert aus der Projektressourcendatei und legen Sie die Texteigenschaft damit fest. Sie sollten sicherstellen, dass Text nicht serialisiert wird oder den von ResourceName festgelegten Wert überschreibt.

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

Ich dachte über etwas ähnliches, aber das scheint böser als ein Resx pro Datei oder setzen sie in Code. Ich bin enttäuscht, dass keine eingebaute erscheint Um dies zu tun, scheint es nur eine kleine Verbesserung von dem, was mit der Localizable - Eigenschaft existiert, nur dass es auch eine Resx - Dateieigenschaft braucht! :( –

3

Ich glaube, ich einen Weg, dies zu tun gefunden!

Zuerst in Ihrer Resources.resx den Access Modifier auf Public.

Danach im Designer generierten Code (Form.Designer.cs) Sie diese an die entsprechende Steuerung schreiben:

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

zum Beispiel:

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

ps.:I don‘ Ich weiß nicht, wie ethisch diese Lösung ist, aber es funktioniert!

+3

Dies ist genau das, was ich vermeiden wollte :("anstatt a Brocken Code, der sie programmatisch setzt " –

Verwandte Themen