Veröffentlicht 16. Februar 20223 j Guten Tag! Ich habe, ja quasi gestern angefangen mich etwas mit Visual Studio 2022 bzw. generell Visual Studio auseinanderzusetzen. Primär wollte ich das ganze machen um ein bisschen coding zu lernen, damit ich nen bisschen an einem Game rumbasteln kann. Meine erste Amtshandlung war, dass ich mir ein Tool selbst schreiben wollte, welches mir die Arbeit bezüglich Einfügen von Items etc. in die Datenbank vom Game erleichtert. Hat auch bis jetzt echt gut geklappt, aber gerade bin ich an einem Punkt angekommen, an dem ich nicht mehr weiterkomme. Das Tool besitzt derzeit 3Forms, das übergeben von Variablen funktioniert soweit, und die in der Ausgabe umgesetzten Werte funktioniert auch bzw. werden richtig angezeigt, aber leider nur für die erste Zeile der Textbox. Abgespeckt sieht der Ausgabecode für die Textbox so aus... ItemProtoQuery.Text = (Variable1 + (", ") + Variable2 + (", ") + Variable3...) this.Variable3 = Variable3 += Variable3; //Diese Ausgabe soll in einer neuen Zeile in der Textbox angegeben werden. ItemProtoQuery.Text = (Variable1 + (", ") + Variable2 + (", ") + Variable3...) Ich bin mir nicht sicher, wie ich das ganze umsetzen kann, ich habe beim googlen bis jetzt nur \r\n gefunden und probiert, hat aber leider nicht so funktioniert wie ich es mir vorgestellt hatte... Derzeit wird einfach die erste Zeile der Textbox immerwieder überschrieben. Das Tool soll mir aber sofern mehrere Verbesserungsstufen vorhanden sind oder sonstiges bei dem Item, direkt mehrere Ausgaben untereinander geben. Sofern weitere Infos benötigt werden, kann ich versuchen diese bereitzustellen. Ich hoffe ihr könnte mir helfen. MfG Xovarto Bearbeitet 16. Februar 20223 j von Xovarto
16. Februar 20223 j Erstmal solltest du dir so keinen String zusammenbauen. Du kannst dies derzeit wesentlich besser über a) String Format https://docs.microsoft.com/de-de/dotnet/api/system.string.format?view=net-6.0 oder b) Zeichenfolgeninterpolation machen: https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/tokens/interpolated Bei großen Datenmenge, bzw. ein String extrem oft verändert wird, nimmt man zudem StringBuilder für bessere Performance her, da hier nicht immer neues String Objekt erstellt wird. Zu deiner Frage: Deine Suche ist korrekt: "\n" ist korrekt. Dies sind Escape Characters siehe: https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/strings/ Hier mal ein Link zu Möglichkeiten um eine neue Zeile in C# zu machen: https://www.sitereq.com/post/6-ways-to-insert-new-line-in-c-and-aspnet Was willst du mit dieser Zeile machen: this.Variable3 = Variable3 += Variable3; Diese, Variable3 ist ja sein String, fügt dem String einen identischen String an. Sozusagen ein append. Das bedeutet nicht, dass dann plötzlich eine neue Zeile da ist. Versuch mit String.Format bzw. Zeichenfolgeninterpolation zu arbeiten, und nutze "\n" bzw. Enviroment.NewLine Bearbeitet 16. Februar 20223 j von KeeperOfCoffee
16. Februar 20223 j Autor Bei der Variable 3 soll es sich eigentlich um einen int handeln. Ich bin noch am überlegen wie ich das ganze umsetzen kann, dass er sich immer jenachdem wie oft eine neuer Zeilenumbruch durchgeführt wird, immer mit sich selbst addiert. Beispiel... Variable3 hat den Wert 15 soll also in der ersten Ausgabe den Wert 15 haben in der zweiten Ausgabe darunter dann den Wert 30 In der dritten Ausgabe den Wert 45 usw... Ich werde es versuchen in die Form zubringen, wie du sie genannt, werde mich melden wenn ich soweit bin.(Wahrscheinlich erst so gegen 22Uhr weil ich gleich zur Arbeit muss. #Edit Ich damit eine Idee rüberkommt wie das ganze aussehen muss am Ende... Es soll in dem Sinne wie auf dem ersten Bild zusehen ist die Möglichkeit geben die benötigten Werte einzutragen, diese werden dann an das nächste Form weitergegeben und dort in der Textbox im benötigten Format ausgegeben. Wie wäre da die beste Herangehensweise? Bei dem zweiten Bild handelt es sich nicht um " sonder um das Zeichen ' ... Spoiler Spoiler Bearbeitet 16. Februar 20223 j von Xovarto
16. Februar 20223 j vor einer Stunde schrieb Xovarto: Ich damit eine Idee rüberkommt wie das ganze aussehen muss am Ende... Es soll in dem Sinne wie auf dem ersten Bild zusehen ist die Möglichkeit geben die benötigten Werte einzutragen, diese werden dann an das nächste Form weitergegeben und dort in der Textbox im benötigten Format ausgegeben. Wie wäre da die beste Herangehensweise? Bei dem zweiten Bild handelt es sich nicht um " sonder um das Zeichen ' ... Ich verstehe noch nicht so ganz, was das jetzt mit 15, 30, 45, ... zu tun hat. Da C# ja eine objektorientierte Sprache ist, würde man für die Werte eine Datenklasse schreiben und die Werte in eine Instanz dieser Klasse speichern. Die Instanz kann man dann ja der nächsten Form übergeben und die kann damit machen, was sie will. Wenn ich das richtig verstehe, dass soll im Bild 1 eine Waffe konfiguriert werden. Also hätte man eine Klasse namens "Waffe" und all ihre Eigenschaften würde man als Property implementieren: class Waffe { public string Name { get; set; } public int AbLevel {get; set; } public int VNum {get; set; } // ... } Um dann eine Instanz zu erzeugen schreibt man dann: var waffe = new Waffe(); waffe.Name = "Ultimative Waffe"; waffe.AbLevel = 100; waffe.VNum = 50; // ... Und das übergibst du dann später der nächsten Form. Wenn ich dich richtig verstanden haben sollte. Bearbeitet 16. Februar 20223 j von Whiz-zarD
16. Februar 20223 j vor 3 Stunden schrieb Xovarto: Derzeit wird einfach die erste Zeile der Textbox immerwieder überschrieben. ItemProtoQuery.Text += Variable1 + ", " + Variable2 + ", " + Variable3; ItemProtoQuery.Text += Environment.NewLine; Bearbeitet 16. Februar 20223 j von ihkaka .
16. Februar 20223 j Autor vor 4 Stunden schrieb Whiz-zarD: Ich verstehe noch nicht so ganz, was das jetzt mit 15, 30, 45, ... zu tun hat. Da C# ja eine objektorientierte Sprache ist, würde man für die Werte eine Datenklasse schreiben und die Werte in eine Instanz dieser Klasse speichern. Die Instanz kann man dann ja der nächsten Form übergeben und die kann damit machen, was sie will. Wenn ich das richtig verstehe, dass soll im Bild 1 eine Waffe konfiguriert werden. Also hätte man eine Klasse namens "Waffe" und all ihre Eigenschaften würde man als Property implementieren: class Waffe { public string Name { get; set; } public int AbLevel {get; set; } public int VNum {get; set; } // ... } Um dann eine Instanz zu erzeugen schreibt man dann: var waffe = new Waffe(); waffe.Name = "Ultimative Waffe"; waffe.AbLevel = 100; waffe.VNum = 50; // ... Und das übergibst du dann später der nächsten Form. Wenn ich dich richtig verstanden haben sollte. Bezüglich was hat das mit 15 30 45 zutun... In dem Spiel gibt es + Stufen von Gegenständen wie in sogut wie jedem anderen Mmorpg. Bei der ersten + Stufe also +1 geht der Ausgangswert den die Waffe auf +0 hat um 15 Punkte hoch, im zweiten Fall also +2 geht der Ausgangswert der Waffe um 30 Punkte hoch dann bei +3 um 45 Punkte. Hoffe das war etwas verständlicher. Ichverstehe nicht ganz was es mit dieser Instanz auf sich hat. Ich möchte ja dass mir das Tool diese Instanz generiert und nicht dass ich sie dann im Code wieder selbst schreiben muss. Weil dann kann ich ja den ganz Kladderadatsch auch einfach selbst schreiben. Aber genau das will ich ja verhindern indem mir das Tool das abnimmt und ich nur Werte in die Textboxen schreiben muss. @ihkakawerde ich nachher gleich mal ausprobieren, danke!
17. Februar 20223 j vor 9 Stunden schrieb Xovarto: Bei der ersten + Stufe also +1 geht der Ausgangswert den die Waffe auf +0 hat um 15 Punkte hoch, im zweiten Fall also +2 geht der Ausgangswert der Waffe um 30 Punkte hoch dann bei +3 um 45 Punkte. Hoffe das war etwas verständlicher. Aber was möchtest du mit den Zahlen erreichen? Das ist doch nur eine Multiplikation. 1 * 15 = 15 2 * 15 = 30 3 * 15 = 45 ... Im Grunde reicht es doch, wenn du in der Waffe-Klasse den Multiplikator bereitstellst und dann den Wert ausrechnest: class Waffe { private const int _multiplikator = 15; public int Level { get; set; } public int Wert => Level * _multiplikator } var waffe = new Waffe(); waffe.Level = 3; Console.WriteLine(waffe.Wert); // Gibt 15 auf dem Bildschirm aus. vor 9 Stunden schrieb Xovarto: Ichverstehe nicht ganz was es mit dieser Instanz auf sich hat. Ich möchte ja dass mir das Tool diese Instanz generiert und nicht dass ich sie dann im Code wieder selbst schreiben muss. Weil dann kann ich ja den ganz Kladderadatsch auch einfach selbst schreiben. Aber genau das will ich ja verhindern indem mir das Tool das abnimmt und ich nur Werte in die Textboxen schreiben muss. Du musst schon schreiben, was der Computer machen soll. Von alleine passiert da nichts. Um es vielleicht anders darzustellen: var waffe = new Waffe(); waffe.Name = nameTextBox.Text; waffe.AbLevel = Convert.ToInt32(abLevelTextbox.Text); waffe.VNum = Convert.ToInt32(vNumTextbox.Text); // ... Natürlich ist dies nur eine vereinfachte Darstellung, da Fehler nicht behandelt werden. Auch würde man es professionell anders lösen aber ich möchte nicht zu viel Verwirrung stiften.
18. Februar 20223 j Autor Ja da hast du recht @Whiz-zarD, ich kann den Wert einfach als Multiplikator angeben, so hab ich da gar nicht drüber nachgedacht… wollte die ganze Zeit irgendwas mit additionen machen was ja totaler Schwachsinn ist bzw Umständlich ist. Danke für den Gedankenanstoß! Die Umsetzung meinerseits sieht im Endeffekt sogar wirklich so wie bei dir aus, und reicht eig auch so aus. Es ist ja auch nur ein Tool für mich selbst weshalb Kleinigkeiten nicht unbedingt beachtet werden müssen zB stört es mich nicht wenn beim Level auch Buchstaben angenommen werden. Weil ich selbst ja weiß dass ich dort keine angeben sollte. Ich habe jetzt überlegt dass ich das ganze vllt mit einer for-Schleife und laufvariable mache um Zeilen einzusparen. sofern ich noch Fragen habe melde ich mich nochmal. Ps. Jetzt würde mich aber doch interessieren wie eine professionellere lösung aussehen könnte. mfg Xovarto
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.