2009-12-03 11 views
11

Estoy tratando de localizar una aplicación WinForms para varios idiomas. Estoy tratando de encontrar una forma de configurar mis propiedades de texto de etiquetas/botones de formulario para leer desde el archivo de recursos en el diseñador (en lugar de tener que mantener una porción de código que los establece programáticamente).Cadenas de WinForms en archivos de recursos, conectados en el diseñador

He encontrado que puedo establecer form.Localizable = true, pero luego los recursos se leen de un archivo junto con el formulario, pero muchos de los míos se comparten en varios formularios.

¿Hay alguna forma de establecer el texto de una etiqueta en el diseñador, en un valor almacenado en un archivo resx a nivel de proyecto?

+0

¿Cuál es la necesidad de hacer esto en el diseñador? El esfuerzo de hacer esto en el código es mínimo. – Walter

+0

¿Has tenido algo de suerte con esto? Necesito esto también. Quiero que todos mis formularios se vinculen a un solo archivo de recursos. –

+0

Lamentablemente no. Estoy cableando un montón de cosas en el código :( –

Respuesta

0

La única forma en que puedo pensar sería crear un control personalizado que agregue una propiedad para el nombre del recurso. Cuando se establece la propiedad, toma el valor del archivo de recursos del proyecto y establece la propiedad del texto con él. Querrá asegurarse de que el texto no se serialice o que sobrescriba el valor establecido por 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

Pensé en algo similar, pero esto parece más desagradable que tener una resx por archivo o configurarlos en el código Estoy decepcionado de que no parece haber incorporado ¡De esta manera, parece solo un pequeño cambio de lo que existe con la propiedad Localizable, solo que también necesita una propiedad de archivo Resx! :( –

3

creo que he encontrado una manera de hacer esto!

Primero en sus Resources.resx configure el Modificador de acceso en Público.

Después de que en el diseñador de código generado (Form.Designer.cs) se puede escribir esto con el control apropiado:

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

por ejemplo:

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

ps.:I Don' ¡sé cuán ética es esta solución, pero funciona!

+3

Esto es exactamente lo que estaba tratando de evitar :("en lugar de tener que mantener una pedazo de código que los establece programáticamente " –

Cuestiones relacionadas