Grüssi,
im Zuge eines Bewerbungsgesprächs wurde ich über mein Wissen von Attributen gefragt, die Antwort war: Was?
Also habe ich mir das mal ein bisschen angeguckt, die Funktionsweise mit dem Debugger erforscht, Hilfe lesen und ein bisschen herumprobiert.
dann bin ich auf eine "Lösung" meines Problems mit Mehrsprachigkeit gestossen.
Grundsätzlich ist mir klar wie man das macht, irgenwo ne Datenquelle (xml, SQL) und den Wert der richtigen Sprachen mittels ID (Filterkriterium) auslesen.
Mein Problem bestand darin, nicht zu wissen wo ich den Code hinschreiben soll!
Hier meine Lösung mittels Attribute:
zuerst mal ein Interface und ein Enum
interface IMultilangual
{
SupportedLanguages CurrentLanguage { get;}
} public enum SupportedLanguages
{
NDef,
German
} und das Attribut selbst:
public class Multilangual_Attribute : Attribute
{
public Multilangual_Attribute() { }
public string GenerateString(string name, SupportedLanguages _
CurrentLanguage)
{
// hier ist der teil wo ich die Datenquelle auslese
// mir ist klar, dass die nächste zeile hier nichts verloren hat ( _
Performance)
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=Rossis-Acer\\***;Initial" & _
"Catalog=***;User Id=****;Password=****;";
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT MLa_" + CurrentLanguage.ToString() + "" & _
"FROM Multilingual WHERE MLa_ControlName LIKE '" + name + "'";
return (string)cmd.ExecuteScalar();
}
} das Formular
public partial class Multilangual_Form : Form, IMultilangual
{
public Multilangual_Form()
{
InitializeComponent();
m_CurrentLanguage = SupportedLanguages.German;
}
private SupportedLanguages m_CurrentLanguage;
public SupportedLanguages CurrentLanguage
{
get { return m_CurrentLanguage; }
}
} das Label
[Multilangual_Attribute()]
public partial class Multilangual_Label : System.Windows.Forms.Label
{
public Multilangual_Label()
{
InitializeComponent();
}
private SupportedLanguages m_CurrentLanguage;
public SupportedLanguages CurrentLanguage
{
get { return m_CurrentLanguage; }
}
public override string Text
{
get
{
Multilangual_Attribute MultiLanguage = ( _
Multilangual_Attribute)Attribute.GetCustomAttribute(typeof( _
Multilangual_Label), typeof(Multilangual_Attribute));
if (MultiLanguage == null)
return this.Text ;
else
return MultiLanguage.GenerateString(this.Name, _
this.CurrentLanguage);
}
}
protected override void OnParentChanged(EventArgs e)
{
base.OnParentChanged(e);
if (this.Parent != null)
if (this.Parent is IMultilangual )
this.m_CurrentLanguage = (( _
IMultilangual)this.Parent).CurrentLanguage;
}
} der Aufruf (die Verwendung)
Multilangual_Label lbl = new Multilangual_Label();
lbl.Name = "dtp_Date";
Multilangual_Form frm = new Multilangual_Form();
frm.Controls.Add(lbl);
Console.WriteLine(lbl.Text); es funktioniert so, und es ist auch genau das Code-Ergebniss das ich haben wollte, nämlich eine stelle wo das steht
jetzt ist die Frage, schreibt man das auch so? ist die Lösung richtig? 0 |