C# Zeichen in WinForms zeichnen

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen, guten Abend!

Ich versuche gerade Zeichen in einer WinForm zu
zeichnen - bspw. # in rot, + in blau, @ in gelb,...

Leider schaffe ich es bisher nur, eine WinForm zu erstellen,
habe aber keine Idee, wie ich dort hinein etwas Zeichnen kann.
Ich habe bereits ein Label erstellt, kann dort aber nur Text einfügen.

Kann mir ggf. einer ein Tutorial (am besten auf deutsch) oder
ähnliches empfehlen, durch das ich mein Vorhaben realisieren kann?

Ziel ist es, dass ich später z.B. eine Linie, bestehend aus #Zeichen
habe, in dieser sich in Mitten ein @-Zeichen befindet, welches ich
mit der Tastatur nach rechts und links verschieben kann -
ist sowas möglich?

Ich bin leider C#-Anfänger und verstehe die ganzen Anleitungen,
die ich bisher diesbezüglich gefunden habe, nicht wirklich. Liegt
vielleicht daran, dass ich bisher nicht wirklich gute Seiten in
Bezug dessen gefunden habe.

Vielleicht kann mir einer einen Tipp geben!?

VG, David
 
Das einfachste wäre, wenn du die Location Eigenschaft eines Labels ändern würdest.
Ebenfalls anschauen kannst du die die Graphics Klasse.

Ich nehme an das soll ein Spiel werden? Dann wäre langfristig etwas wie Monogame zielführender.
 
Zuletzt bearbeitet:
#, + und @ sind doch Text. Schreib das jeweilige Zeichen einfach in ein Label und ändere die Textfarbe des labels. Dann noch die Position der Labels anpassen. Fertig
 
Hellblazer schrieb:
#, + und @ sind doch Text.
Schreib das jeweilige Zeichen einfach in ein Label und ändere die Text-
farbe des labels. Dann noch die Position der Labels anpassen. Fertig

Habe ich dadurch dann später auch die Möglichkeit,
das @-Zeichen zu bewegen und über die jeweiligen
anderen Zeichen zu setzen bzw. diese dadurch zu
ersetzen?

Ja, es soll ein Spiel werden.

Angenommen, ich möchte folgendes realiseren:
# # # # # + + + # # # # #
# # # + + + + + + + # # #
# # # # # + + + # # # # #

Bräuchte ich dann auch 13 x 3 (39) Labels - oder nur eins?
 
Du könntest das ganze auch mit einem einzigen machen, dass dann eben das ganze als zusammenhängenden Text anzeigt. Und je nach Position der Zeichen musst du den Text dementsprechend generieren.

Die Position eines Labels kannst du jederzeit mit der Location-Eigenschaft ändern.
 
Das wird mit einem Label nicht funktionieren, da die Zeichen ja verschiedenfarbig sein sollen.
Und wenn das häufig animiert wird solltest du auf jeden Fall doublebuffering verwenden, hier ist ein kleines Tutorial zur Graphics-Klasse/Doublebuffering.
 
Stimmt, daran habe ich nicht gedacht.

Wenn du vor hast mehr Spiele zu entwickeln, dann schau dir unbedingt http://www.monogame.net/ an.
 
Vielen Dank vorerst für eure Antworten zu meinem Problem!

Es soll nur ein einziges Spiel werden.
Mehr, werde ich in diesem Bereich wohl nicht machen ;-)

Ich werde nun für jedes Zeichen ein eigenes Label benutzen
und die Position der Labels mit der Location-Eigenschaft ändern.

Angenommen, ich habe 11 x 11 Labels (je 11 Spalten/Zeilen).
In der Mitte habe ich ein @-Zeichen.
Wie kann ich jetzt mit der Tastatur, das @-Zeichen in ein an-
deres Label verschieben und auf den ehemaligen Wert des
Labels zugreifen? - Ist das möglich?

Also ich möchte nur hoch/runter/rechts/links
(jeweils nur um ein Label) gehen können.

VG, David
 
Aber über die Location-Eigenschaft gebe ich doch nur die Position
des Labels an, oder? Ich möchte ja quasi den Wert verändern,
wenn ich mit der Tastatur das Label auswähle.
 
Dann ist es deine Aufgabe je nach gedrückter Taste auf der Tastatur die Location-Eigenschaft dementsprechend zu verändern.

Ich würde an deiner Stelle mit einem 2D-Array arbeiten. Label[,] labels = new Label[11, 11];

Dann

Code:
int atLabelX = 5, atLabelY = 5; //position des @-Labels

if (pressedKey == Keys.Right)
{
    labels[atLabelX, atLabelY].Text = "#"; 
    labels[atLabelX, atLabelY].Color = Colors.Red;
    labels[atLabelX+1, atLabelY].Text = "@"; 
    labels[atLabelX+1, atLabelY].Color = Colors.Yellow;
}

Oder falls du es mit der Location-Eigentschaft machen willst:

Code:
int atLabelX = 5, atLabelY = 5; //position des @-Labels

if (pressedKey == Keys.Right)
{
    Point next = labels[atLabelX+1, atLabelY].Location;
    labels[atLabelX+1, atLabelY].Location = labels[atLabelX, atLabelY].Location;
    labels[atLabelX, atLabelY].Location = next;
}
 
Zurück
Oben