Zum Inhalt springen
  • 0

VS2022 neue Zeile in Textbox


Xovarto

Frage

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 von Xovarto
Link zu diesem Kommentar
Auf anderen Seiten teilen

7 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

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 von KeeperOfCoffee
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

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

qGygeab.thumb.jpg.d03bd374e66916c463d62741f1c6324e.jpg

Spoiler

f2Ziaab.thumb.jpg.7f470a1227b743283067859fa49e03f0.jpg

 

Bearbeitet von Xovarto
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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 von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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 von ihkaka
.
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...