[vb.net] MDIchild Problem beim ändern der .text-Eigenschaft. Wird in .size nicht übernommen.

Das ist jetzt ein wenig kompliziert zu erklären. Ich bin auch nur darauf gestoßen weil die Software multilingual ist und ich Texte zur Laufzeit ändern muss.

Damit das Problem auftritt muss die Anwendung eine MDI Anwendung sein. Ändern wir nun zur Laufzeit im MDIchild z.B. den Text von Button1 (Me.Button1.Text = „Bla Bla“) dann funktioniert das auch wunderbar. Das Problem dabei ist das sich die Werte von Me.Button1.Size. nicht verändern. Das heißt der Button-Text ändert sich zwar, aber die Size-Eigenschaften nicht.

Das ist insofern ein Problem als das ich ja meist 2 Buttons habe. „Ok“ und „Abbrechen“ oder was auch immer. Nun ändere ich den Text im rechten Button und er wird dadurch kleiner oder größer (autosize = on). Damit das ganze trotzdem weiterhin schick aussieht, muss der linke Button nun so verschoben werden das der Abstand zwischen Button1 und Button2 wieder normal groß ist. Und genau hier brauche ich den neuen Me.Button1.Size.Width-Wert. Der aber immer noch der alte ist.

Die einzige Lösung die ich gefunden habe ist das die Texte der zu ändernden Elemente schon geändert werden müssen noch bevor man in der MDIform das Child öffnet. Dann werden die Werte auch schon beim Laden des Childs geändert. Achso, das Problem ist nicht immer. In der Form-Resize Funktion z.B. ändern sich die Werte ordnungsgemäß. Beim Load allerdings nicht.

Ich denke das Problem werden nur sehr wenige haben, wer ändert schon zur Laufzeit die Texte in Elementen. Aber vielleicht der ein oder andere schon.
Das wäre also eine mögliche Lösung. Hast du noch eine andere, bessere? Dann schreib doch bitte einen Kommentar und zeige uns deine Lösung. Danke.

[VB.NET] Datagridview – Schriftfarbe oder Hintergrundfarbe einer einzelnen Zelle ändern

Problem des Tages heute: Eine einzelne Zelle in einem Datagridview farbig ändern. Egal ob Schriftfarbe oder Hintergrundfarbe.

Schon mal versucht? Geht gar nicht so einfach. Das habe ich auch ganz schnell rausgefunden. Es gibt zwar die Style Eigenschaften, wenn man sich die Zelle mit Me.Datagridview1.Rows(0).Style… vorknöpft. Doch bewirkt eine Änderung hier nicht viel. Erst die letzte bzw. erste neue Zelle wird damit eingefärbt. Nicht aber die Zelle die man eigentlich einfärben möchte.

Und so habe ich heute stundenlang hin und her experimentiert, Google befragt, mich durch etliche Foren belesen, kuriose Klassen ausprobiert… und es am Ende doch selbst gemacht.

Leider ist es ein sehr mühsamer Weg, wenn man einer einzigen besch*** Zelle sagen will “Mache mal den Text Rot!”. Denn man muss das komplette Datagridview manuell anlegen. Ich arbeite ja generell ohne Databindings. Ja, fragt mich nicht warum, ich mache es halt :-) Nur war es bis dato einfach zu sagen Me.Datagridview1.Rows.Add(„Text 1“, „Text 2“, 1, 2, 3, etc.)

Jetzt wird das ganze nicht mehr so einfach. Jetzt müssen wir jede Zelle wirklich einzeln anlegen, denn nur so können wir auf die konkreten Zelleigenschaften zugreifen und auch setzen.
Ok, wie geht es konkret.

Dim DGVRow As New DataGridViewRow 
Dim Cell As DataGridViewCell 

'Eine normale Zelle 
Cell = New DataGridViewTextBoxCell 
Cell.Value = "Ein Text zum Testen" 
DGVRow.Cells.Add(Cell) 

'Eine Zelle mit rotem Text 
Cell = New DataGridViewTextBoxCell 
Cell.Value = "Ein roter Text zum Testen" 
Cell.Style.ForeColor = Color.Red 
DGVRow.Cells.Add(Cell) 

Me.Datagridview1.Rows.Add(DGVRow)

Was machen wir hier? Wir definieren eine einzelne Datagridview-Zelle und weisen dieser alle nötigen Werte zu. Im Normalfall einfach nur den Value. Aber man kann ihr jetzt auch eine Schriftfarbe zuweisen oder eine Hintergrundfarbe, Schriftart und alles weitere.
Dann packen wir die Zelle in einen Datagridview-Row (DGVRow) und können Sie danach neu Formatieren und neu Belegen, mit der nächsten Zelle. Die dann auch wieder in das Row-Element… bis alle Zellen für ein Row voll sind. Das vollständige DGVRow weisen wir letztendlich dem Me.Datagridview.Row.Add zu. Fertig…

… mit einer Zeile. Das müssen wir jetzt für alle Zeilen machen die dem Datagridview hinzugefügt werden sollen. Daher ist meine Empfehlung das ganze einer Funktion zuzuweisen oder noch besser einer Class. Das hier soll ja nur zur Orientierung dienen wie es funktioniert.

Sehr umständlich, aber funktioniert. Und das ohne fremde Klasse. ;-)

Update: Ich korrigiere. Auch mit Me.Datagridview1.Rows(0).Cells(0).Style.ForeColor = … lässt sich die Schriftfarbe verändern. Nur warum es mal funktioniert und mal nicht… das muss ich noch ergründen. Als einfach ausprobieren. Wenn es so funktioniert, dann kann man sich den komplizierteren Weg oben sparen.

Der Spruch am Mittwoch / The saying on wednesday

Wenn Dir das Leben in den Arsch tritt, …nutze den Schwung um vorwärts zu kommen.
Wenn Dir das Leben Zitronen bietet, …frag nach Tequila und Salz oder Ramazzotti
Wenn dir jemand Steine in den Weg legt,heb sie auf und schmeiß sie ihm an den Kopf
Wenn jemand zu Dir sagt: die Zeit heilt alle Wunden,…hau ihm in die Fresse und sag: “warte, ist gleich wieder gut!!!”
Wenn dir jemand sagt: Du bist das Letzte , dann grins und sag: Ich weiss Das Beste kommt immer zum Schluss!! ;

Gelesen, für gut befunden, geklaut und gepostet !!!!!

If the life kicks you in the ass… use the push to come forward.
If the life offers you lemon… ask for Tequila and salt or Ramazzotti.
If someone put stones in your way, pick them up and throw them on his head.
If someone says to you: Time heals all wounds… smash his face in and say: “Wait, is good again in a moment!!!!”

Read, found it good, stolen and posted !!!!!

(c) http://www.motifake.com/user/Dr.+Rusak

Wenn dir jemand sagt: Du bist das Letzte , dann grins und sag: Ich weiss Das Beste kommt immer zum Schluss!! ; )

Einen schönen Programmierer Tag!

Hi,

heute mal nur schnell eine Schlagzeile. Was aber nicht heißt das sie unwichtig ist! Denn heute ist Programmers Day (Tag der Programmierer). :-) Ein sehr wichtiger Feiertag (leider kein offizieller… hätte gern frei heute)!

Wer sich jetzt fragt wann denn der Tag der Programmierer im Jahr ist… na ganz einfach… am 256ten Tag im Jahr ;-) Warum 256? Weil man mit einem (8bit) Byte genau 256 verschiede Werte/Zustände (0 und 1) erstellen kann.

Die Zahl ist die Grundzahl eines jeden Programmierers. Wenn ein Programmierer auch sonst nix kann, diese Zahl muss er kennen… sonst ist es kein Programmierer :-)

Ins Leben gerufen wurde der Programmers Day von Valentin Balt im Jahr 2002. Er hat sogar versucht das Russland diesen Tag als offiziellen Feiertag anerkennt. Und?… Seid dem Jahr 2009 gilt der Programmers Day als offizieller Feiertag in Russland. … Ich bin begeistert. :-)

 

Also liebe Programmierer all around the world: Happy Programmers Day!! And less bugs in the next year! ;-)