Autor Beitrag
ProgBilly
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 07.10.15 18:43 
Hallo zusammen,

ich habe eine Klasse Spielfeld.

Dort lese ich eine Text Datei aus und erstelle programmgesteuert Labels
mit verschiedenen Inhalt (Je nachdem welches Zeichen ausgelesen wird).

z.B .txt Datei mit Inhalt ("ABC")

3 Labels
A B C

werden erstellt. Das funktioniert auch soweit.

Nun möchte ich diese Labels mit der Tastatur nach links, rechts, oben und nach unten bewegen können.

Dazu habe ich mir folgenden Eventhandler erstellt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{     
     if (e.KeyCode == Keys.Left)
     {     
     }

     if (e.KeyCode == Keys.Right)
     {
     }

     if (e.KeyCode == Keys.Up)
     {
     }

     if (e.KeyCode == Keys.Down)
     {
     }
}

Mir ist klar, dass ich nun die Position der Labels über die Location und den Eigenschaften .left und .right steuern kann
Ich habe dann in dem Eventhandler ein Objekt der Klasse erstellt, aber irgendwie komme ich nicht weiter.
Meine Frage ist also wie kann ich überhaupt diese labels ansprechen??
Ich sehe die nirgendswo. Für meinen Eventhandler sind diese unbekannt.
Wie kann ich sagen, dass das Label mit dem Inhalt A nach links bewegt werden soll???
Ich hoffe mein Problem verständlich erklärt zu haben.

Danke vorab

Gruß
Billy

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 07.10.15 18:55 
Woher weißt du (bezogen auf den gezeigten Codeausschnitt) das du das Label mit dem Inhalt A bewegen willst?
ProgBilly Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 08.10.15 09:44 
Hallo Ralf Jansen,

das Ganze soll ein Art pacman Spiel werden.
Ich lese eine .txt Datei aus und baue somit das Spielfeld (bestehend aus Wände und Items).
Jedes Element ist ein Label.
In der Mitte habe ich meine Figur, welche die Items aufsammeln soll.

Im Prinzip möchte ich also nur das Element (Label) bewegen mit dem Inhalt meiner Figur.
Das würde ich dann irgendwie abfragen.

Aber wie kann ich überhaupt auf diese dynamisch erstellten Labels zugreifen?


Danke Dir nochmal vorab

Gruß
Billy
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 08.10.15 10:12 
Zitat:
Aber wie kann ich überhaupt auf diese dynamisch erstellten Labels zugreifen?


Ich würde beim einlesen der Datei dann das A abfangen und das dazugehörende Label einfach in einer Variablen merken.
Dann hast du die Möglichkeit auch gleich abzufangen wenn mehrere A (oder keins) in der Datei sind was vermutlich nicht gewünscht ist wenn das der Spielfigur entsprechen solll.


Im allgemeinen Fall stecken die Controls auf der Form in der Controls collection der Form.
Also in der Property worüber du die Labels auch der Form hinzugefügt hast. Die hat zum Beispiel auch eine Find Methode die über den Namen des Controls das Control sucht. Wenn du denn Labels also eindeutige Namen (die haben eine Name Property) gibst kannst du mit der Find Methode einfach danach suchen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 08.10.15 11:18 
Hallo Billy,

für ein PacMan-Spiel würde ich dir aber eher zum Selberzeichnen raten, wie ich schon in meinem Beitrag zu "Automatische Formgrößenanpassung an Daten aus Textdatei" schrieb. Das Hantieren mit vielen Controls in WinForms ist nicht empfohlen.
ProgBilly Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 08.10.15 14:30 
Danke Dir Ralf Jansen.

dein Tipp mit der Find Methode war sehr hilfreich

@Th69
Du hast Recht. Wenn das Programm einmal funktioniert und ich die ganze Logik verstanden habe,
dann versuche ich es zu optimieren und selber zu zeichnen

Gruß
Billy
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Do 08.10.15 16:16 
Hallo,

Also ich würde dir schwer empfehlen gleich auf selbst zeichnen umzusteigen. Wenn du die Logik nämlich nicht sauber von der GUI trennst (und das ist bei WinForms sowieso etwas problematisch), wirst du beim umschreiben des Codes Probleme bekommen. Wenn du Pech hast, musst du den kompletten Code neu schreiben.

Glaub mir ich spreche aus Erfahrung :D

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler

Für diesen Beitrag haben gedankt: ProgBilly