Laden...

Zur Laufzeit Controls aktualisieren ...

Erstellt von mrennen vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.583 Views
M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 12 Jahren
Zur Laufzeit Controls aktualisieren ...

Hallo mal wieder und herzlichen Dank für die letzten Hilfestellungen.

Aktuell bastel ich an einer Umsetzung der Mehrsprachigkeit mit besonderen Kriterien bei welchem ich Hilfe gebrauchen könnte 😃

Ich habe eine Winform welche über unterschiedliche Container verfügt (TabControl, GroupControl, Grid).

Zusätzlich verfüge ich über eine SQL Tabelle welche vom Benutzer pflegbar die einzelnen Übersetzungen der Labels, Buttons, usw. beinhaltet.

Im Load der Winform fülle ich ein DataSet mit allen vorkommenden Übersetzungen, abhängig von der gewählten Sprache - alles super bislang.

Gibt es eine Möglichkeit alle Controls einer Winform zu durchlaufen, unabhängig von "SubControls" ?

Wenn ich die einzeln durchlaufe werden 2 Fälle nicht aktualisiert:

  • Der Button "btnLoeschen" bekommt seinen Text "&Löschen" nicht (alle anderen Buttons schon)
  • Das zweite GroupControl bekommt seinen Text nicht (identischer Text wie das erste GroupControl, nur halt anderer Reiter)

Hoffe das ist so einigermaßen verständlich...

M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 12 Jahren

Das hier geht nicht (einzeln jedes Control durchlaufen):


private void Translate()
        {
            DataSet translate = sda.GetUebersetzung(AktuelleSprache, Name);

            foreach (DataRow dr in translate.Tables[0].Rows)
            {
                foreach (Control ctrl in this.Controls)
                {
                    if (ctrl.Name == dr[0].ToString())
                        ctrl.Text = dr[1].ToString();
                }

                foreach (Control ctrl in xtcTrans_Gruende.Controls)
                {
                    if (ctrl.Name == dr[0].ToString())
                        ctrl.Text = dr[1].ToString();
                }

                foreach (Control ctrl in xtpUebersicht.Controls)
                {
                    if (ctrl.Name == dr[0].ToString())
                        ctrl.Text = dr[1].ToString();
                }

                foreach (Control ctrl in xtpEigenschaften.Controls)
                {
                    if (ctrl.Name == dr[0].ToString())
                        ctrl.Text = dr[1].ToString();
                }

                foreach (Control ctrl in gcFunktionen.Controls)
                {
                    if (ctrl.Name == dr[0].ToString())
                        ctrl.Text = dr[1].ToString();
                }

                foreach (Control ctrl in gcEFunktionen.Controls)
                {
                    if (ctrl.Name == dr[0].ToString())
                        ctrl.Text = dr[1].ToString();
                }
            }

            translate.Dispose();
        }

916 Beiträge seit 2008
vor 12 Jahren

Hallo mrennen,

hast du den mal debugged und geschaut ob das Control überhaupt in der Iteration auftaucht? Ich tippe darauf das du es gar nicht durch läufst.

Again what learned...

296 Beiträge seit 2007
vor 12 Jahren

Hallo mrennen,

jedes Control hat eine Eigenschaft Controls in der alle Kinderelemente enthalten sind.

Du musst also nur rekursiv vom obersten Control (Form) alle Controls einsammeln und darauf dann deine Übersetzung anwenden.

Es gibt aber wesentlich konfortablere Methoden zum Thema Lokalisierung. Aber du schreibst ja "besondere Anforderungen".

Grüße

M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 12 Jahren

Habe ich eben nochmal debuggt und der läuft wirklich da rein (im beiden Fällen) und macht sein Update ...

916 Beiträge seit 2008
vor 12 Jahren

Aber wenn er doch sein Update macht, dann sollte die Übersetzung doch durchgeführt worden sein. Hast du mal anschließend ein Invalidate() auf das Control ausgeführt? Dies sollte zwar nicht nötig sein, da das Control selber dafür zu sorgen hat, aber versuch es mal.

Again what learned...