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



BeitragVerfasst: Do 01.10.15 16:15 
Hallo zusammen,

ich habe ein Problem wo ich keinen richtigen Ansatz finde wie ich es angehen kann.

Ich habe eine .txt Datei mit Inhalt. Der Inhalt ist erstmal uninteressant
In der ersten und zweiten Zeile stehen aber Zahlen (z.B 15 und 10)


Diese Zahlen sollen meine Zeilen und Spalten intepretieren.
Ich möchte also diese .txt Datei auslesen (StreamReader, ReadLine z.B) und das WinForms Fenster soll sich anhand dieser beiden Zahlen aufbauen.
Also 15 Spalten lang und 10 Zeilen breit.
Ist das verständlich wie ich es meine?

Wäre sehr dankbar für eine kleine Unterstützung.

Gruß
Billy

Moderiert von user profile iconTh69: Titel geändert (war "WinForms - Daten auslesen aus einer .txt Datei")
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 01.10.15 18:21 
Hallo und :welcome:

ich kann aus deinem Beitrag trotzdem nicht rauslesen, womit du genau Probleme hast?
Geht es um das Interpretieren der Zahlen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
string s = streamReader.ReadLine();
int x;
if (Int32.TryParse(s, out x))
{
  
}

oder um das Erzeugen der Form? Suchst du ein passendes Control dafür, z.B. TableLayoutControl oder DataGridView, wo du dann die Größe der Spalten (Columns) und Zeilen (Rows) setzen kannst?
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 01.10.15 19:34 
Zitat:
Ich möchte also diese .txt Datei auslesen (StreamReader, ReadLine z.B) und das WinForms Fenster soll sich anhand dieser beiden Zahlen aufbauen.
Also 15 Spalten lang und 10 Zeilen breit.
Ist das verständlich wie ich es meine?


Was sind denn für dich Zeilen und Spalten? Ich habe davon natürlich eine allgemeine Vorstellung ab was sind deine in diesem Context?
Was soll den in den Zellen deiner Matrix/Grid/Tabelle stecken die du durch Spalten und Zeilen aufspannst?
ProgBilly Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 02.10.15 11:46 
Hallo ihr beiden und danke für die Antworten.

Also es geht darum.

ich habe eine .txt Datei mit folgenden Inhalt
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
15
10
xxxxxxxxxxxxxxxxxxx
xx...xxxxx....xxxxx
xxxx...xx......xxxx
xx....xx......xxxxx
x.................x
x.................x
xx...xxxxx....xxxxx
xxxx...xx......xxxx
xx....xx......xxxxx
xxxxxxxxxxxxxxxxxxx

so als Beispiel.
Es handelt sich um ein Labyrinth und man muss diese Items
mit der Tastatur wie bei pacman aufsammeln.

Ich muss also jetzt das Labyrinth auslesen und grafisch darstellen
und da hänge ich zurzeit.


Ich habe mir gedacht, dass ich mit ReadLine alles zeilenweise ablese
und mit If prüfe ob ein "X" oder ein "." gefunden worden ist.
Demensprechend wollte ich dann bei x ein Image was ein X darstellt zeichnen
und bei dem Punkt eine ganz kleine Ellipse.

Geht das auch einfacher bzw. elleganter?

Die ersten beiden Zahlen sollen die Größe des Spielfeldes interpretieren,
damit das Winforms Fenster nicht größer ist als das Spielfeld.

Später soll es möglich sein mehrere Spielfelder also .txt Dateien anzulegen
um zwischen verschiedenen Labyrinthen wählen zu können.


Ich danke vorab :-)
Bin noch ziemlich neu

Gruß
Billy

Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 02.10.15 12:42 
Hallo,

was du als erstes benötigst ist eine Logik-Klasse, welche das Labyrinth repräsentiert (dies nennt man dann auch Modellklasse).
Ausgehend auf dieser Logik-Klasse kannst du dann die GUI damit koppeln.
Wichtig ist, daß du Eingabe (Einlesen der Textdatei), Logik und Ausgabe als getrennte Aufgaben (Funktionalitäten) ansiehst und jedes als eigene Klasse designst und implementierst.

Ein paar Stichworte dazu sind: MVC (Model-View-Controller) / MVP (Model-View-Presenter)

Für dich als Anfänger wäre es sogar das beste, wenn du zuerst ein Konsolenprogramm damit entwickelst (mit einfacher Konsolengrafik). Denn wenn du das Einlesen der Textdatei und die Logik-Klasse damit sauber zum Laufen gebracht hast, dann kannst du im nächsten Schritt ein WinForm-Projekt damit erstellen und die Grafikklasse dann durch die Form ersetzen.

Du kannst dir auch mal meinen Artikel Kommunikation von 2 Forms durchlesen und das unten angehängte Beispielprogramm runterladen und anschauen, um zu sehen, wie man so ein WinForms-Programm (professionell) strukturiert und entwickelt.

PS: Habe gerade gesehen, daß ich die obigen 2 Links ja auch in meinem Artikel (unter "Weiterführende Links") schon verwendet habe (ich werde wohl schon vergesslich...)
ProgBilly Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 02.10.15 13:09 
Hallo Th69,

vielen Dank für die Tipps und Links die ich auch beherzigen werde. Ich dachte mir auch das Ganze wohl erstmal auf der Konsole zu lösen, aber hättest vielleicht noch den einen oder anderen Tipp für mich wie man das Ganze mit dem Spielfeld so hinkriegt.

Also mein Problem ist noch, dass ich nicht weiß wie man das WinForms Fenster ensprechend automatisch anpassen kann (Zeilen, Spalten).

Und geht meine Vorgehensweise für die grafische Implementierung

Ich habe mir gedacht, dass ich mit ReadLine alles zeilenweise ablese und mit If prüfe ob ein "X" oder ein "." gefunden worden ist.
Demensprechend wollte ich dann bei x ein Image was ein X darstellt zeichnen und bei dem Punkt eine ganz kleine Ellipse.


in die richtige Richtung, oder macht man sowas ganz anders.

Ich brauche irgendwie so einen kleinen Schubser damit ich starten kann. Aktuell weiß ich nämlich noch garnicht wie ich das Ganze angehen soll.

Ich danke nochmal vielmals

Gruß
Billy

Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 02.10.15 17:55 
Hallo Billy,

vom Prinzip her kannst du deinen Ansatz so umsetzen - nur wie schon geschrieben, erstelle dir eine Logiklasse Labyrinth dafür, welche die Daten hält.
Weißt du überhaupt wie man in WinForms programmiert, d.h. den ereignisorientierten Ansatz? Falls du Selberzeichnen möchtest, anstatt eines der oben erwähnten Controls zu benutzen, dann lies dir mal [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) durch.

Erstelle dir jetzt aber ersteinmal dein Konsolenprogramm - und falls du weitere Fragen dann zu WinForms hast, erstelle dafür bitte einen neuen Beitrag.
ProgBilly Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 03.10.15 16:34 
Vielen Dank,

ja, ereignisorientiert mit delegates ist mir schon ein Begriff.
Ich werde das mit der Labyrinth Klasse auch so machen. Danke auch für diesen Tipp.

Aber kannst du mir vielleicht noch verraten wie ich das mit den Zeilen, Spalten
also automatische Anpassung des Fensters angehen kann?

Wäre super

Danke nochmal und viele Grüße
Billy
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 04.10.15 10:02 
Die Größe eines Fensters kannst du über die Eigenschaften Width und Height einer Form setzen (wenn du z.B. den Inhalt Selberzeichnen willst).
Hast du entsprechende Steuerelemente (Controls) auf der Form platziert, so kannst du dir auch mal die Eigenschaften AutoSize und AutoSizeMode anschauen.

Und dann gibt es auch noch Anchor und Dock, s. (u.a. meine Beiträge) in Fensterinhalt automatisch skalieren.

PS: Ich habe mal den Titel angepaßt.
ProgBilly Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 05.10.15 08:49 
Ich danke Dir vielmals.
Mit diese Infos versuche ich jetzt die Sache anzugehen.

Gruß
Billy