2016-04-24 23 views
0

Hey Leute, ich habe an einem Code in meiner Combobox gearbeitet Ich habe ein paar Items drin 3 Sprachen Englisch, Französisch und Deutsch Ich hoffe, wenn ich den Apply Button in meinem Programm drücke alle Textänderungen im Formular setC# Wie wähle ich eine Sprache aus?

private void ApplyButtonOptions_Click(object sender, EventArgs e) 
    { 
     Properties.Settings.Default.Save(); 

     if (comboBox1.SelectedItem.ToString() == "English") 
     { 
      comboBox1.SelectedItem = englishLanguage; 
     } 

     if (comboBox1.SelectedItem.ToString() == "German") 
     { 
      comboBox1.SelectedItem = GermanLanguage; 
      InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("de")); 
     } 
    } 
+0

viel mehr Code benötigen. Wie wechseln Sie zwischen den Sprachen? Ist das eine Form oder eine Web App? Bitte geben Sie ein minimales, aber nachprüfbares Beispiel an - wir sollten den Code kopieren und ausführen können, um das Problem zu sehen, das Sie haben. – nhouser9

+0

Es ist in einer Form. – DialUp

+0

Danke, aber Sie haben den Rest meines Beitrags ignoriert ... Sehen Sie bitte, wie Sie Fragen stellen können: http://stackoverflow.com/help/mcve – nhouser9

Antwort

1

zuerst den Text UI-Steuerelemente (und Größe, wenn nötig) für alle Sprachen, die Sie unterstützen möchten: es kann nicht zur Arbeit kommen.

Hier ist, wie: https://msdn.microsoft.com/en-us/library/y99d1cd3%28v=vs.71%29.aspx

Dann müssen Sie eine Methode erstellen, die alle UI-Steuerelemente auf dem aktuellen Form aktualisiert. Sie können diese Methode in einem separaten statischen Helfer Klasse wie folgt erstellen:

public static class ResourceLoader 
{ 
    public static void ChangeLanguage(System.Windows.Forms.Form form, System.Globalization.CultureInfo language) 
    { 
     var resources = new System.ComponentModel.ComponentResourceManager(form.GetType()); 

     foreach (Control control in form.Controls) 
     { 
      resources.ApplyResources(control, control.Name, language); 
     } 

     // These may not be needed, check if you need them. 
     Thread.CurrentThread.CurrentUICulture = language; 
     Thread.CurrentThread.CurrentCulture = language; 
    } 
} 

Dieser Code basiert auf Suprotim Agarwal's article.

über die Unterschiede zwischen Lesen CurrentCulture und CurrentUICulture hier: What is the difference between CurrentCulture and CurrentUICulture properties of CultureInfo in .NET?

im Ereignishandler Schaltfläche klicken Sie diese Methode nur aufrufen müssen:

private void ApplyButton_Click(object sender, EventArgs e) 
{ 
    var cultureInfo = new System.Globalization.CultureInfo(cboCultureInfo.SelectedItem.ToString()); 

    ResourceLoader.ChangeLanguage(this, cultureInfo); 
} 
+0

Danke ich werde das bald versuchen. – DialUp

+0

Ich bekomme Fehler beim Anwenden der Schaltfläche cboCultureInfo und ResourceLoader nicht finden. Und wie bekomme ich das an dem in der Combobox ausgewählten Gegenstand? Was sind die Parameter um die Methode aufzurufen? – DialUp

+0

@DialUp In meinem Beispiel ist 'cboCultureInfo' der Name der Combobox. Ich verwende seine SelectedItem-Eigenschaft. Ersetzen Sie den Namen "cboCultureInfo" durch den Namen, den Sie für die Combobox angegeben haben. Die von mir angenommene 'ResourceLoader'-Klasse befindet sich in einem von Ihnen angegebenen Namespace. Stellen Sie sicher, dass Sie über die Ereignishandlermethode auf diesen Namespace zugreifen. Erweitern Sie den Methodenaufruf bei Bedarf mit dem Namespace, z. 'YourNamespace.ResourceLoader.ChangeLanguage (this, cultureInfo);' oder setze 'YourNamespace; 'in die using-Anweisungen, in denen der Event-Handler definiert ist. – Gabor

Verwandte Themen