Entwickler-Ecke
WinForms - Form und Controls bei Sprachumstellung neuzeichnen
Chiyoko - So 24.04.11 18:08
Titel: Form und Controls bei Sprachumstellung neuzeichnen
Huhu,
mein Problem besteht darin, wie die Überschrift schon sagt, dass es mir
nicht möglich ist, bei einem Buttonklick "alle" Controls der Form
neu zu zeichnen und somit auch Texte in anderen Sprachen anzuzeigen.
Ich muss immer erst das jeweilige Control anklicken oder aber
ein anderes Control anklicken um das, was ich umschalten will,
umzuschalten.
Mit
Quelltext
1: 2: 3:
| Invalidate(true); Refresh(); Update(); |
klappt es nicht.
Ich habe nur eine Form.
Bitte um Rat.Danke.
Oliver M. - Mo 25.04.11 15:55
Hi,
warscheinlich gibt es dafür eine Spezialmethode, aber ich kenne sie nicht. Du kannst doch einfach alle Steuerelemente in der Form durchgehen. Entweder manuel oder durch eine Schleife:
C#-Quelltext
1: 2: 3: 4:
| foreach (Control c in this.Controls) { c.Refresh(); } |
Falls du Steuerelemente ineinander verschachtelt hast, musst du ein paar von diesen Schleifen ineinander verschachteln.
MfG Oliver
Chiyoko - Mo 25.04.11 16:42
Ja, die Vermutung hatte ich auch schon und soviele sind es ja nicht.
ich nahm an, das es einen einzigen befehl geben könnte, aber wenn dem
so ist, dann dank ich dir trotzdem.
Chiyoko - Do 28.04.11 14:00
Das funktioniert leider genauso wenig.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| private void sprache_button(object sender, EventArgs e) { if (sender == toolStripMenuItem2) { DE = true; ENG = false;
for (int i = 0; i < this.Controls.Count; i++) { this.Controls[i].Refresh(); for (int j = 0; j < this.Controls[i].Controls.Count; j++) { this.Controls[i].Controls[j].Refresh(); } } } else if (sender == toolStripMenuItem3) { DE = false; ENG = true;
for (int i = 0; i < this.Controls.Count; i++) { this.Controls[i].Invalidate(); for (int j = 0; j < this.Controls[i].Controls.Count; j++) { this.Controls[i].Controls[j].Invalidate(); } } } |
Weder mit Refresh noch mit Invalidate.Update ist das selbe.
Da es aber umgestellt wird, sobald ich einen neuen Tab anklicke, scheints mit einem Event zusammen zu hängen.
Chiyoko - Do 28.04.11 16:09
Ok, problem geloest, es funktioniert einwandfrei ohne dass ich
jetzt auf protected overwrite onPaint zurueckgreifen musste.
Mein Fehler lag, wie schon erwähnt, im falschen Event, ich hab
einfach die Controls, die verändert werden sollen, ins button event
gepackt, die controls durchlaufen und auf invalidate gestellt.
Nur die zur laufzeit erstellten Controls sind mir noch ein Dorn im Auge aber
das bekomm ich denke ich auch hin.
Chiyoko - So 01.05.11 14:33
Noch eine Frage zum zeichnen /updaten von Textboxem.
Ich möchte nicht nur die Controls updaten, sondern auch die
Textboxen inneralb, nur irgendwie passiert nichts.
Folgendes funktioniert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| foreach (Control c in panel.Controls) { if(c.GetType() == typof(RichTextBox)) { c.resetText(); } } |
Aber ich möchte den Text wechseln und nicht löschen.
Update,invalidate und refresh funktioniert nicht.
Weitere Funktionen/methoden sind mir nicht bekannt.
Der text sollte auf Buttoncklick geändert werden.
Hat jemand bitte einen Ratschlag?
EDIT;
Ich muss rausfinden, welcher TreeViewNode angeklickt wurde.
Den dann einfach nochmal selektieren per (automatisch), dann
sollte es gehen.Aber erstmal muss ich rausfinden, wie.
Ok, nicht das optimalste, aber es geht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| foreach (Control c in panel.Controls) { if(c.GetType() == typof(RichTextBox)) { TreeNode nowNode = treeView1.SelectedNode; treeView1.SelectedNode = treeView1.SelectedNode.Parent; treeView1.SelectedNode = nowNode; } } |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!