Entwickler-Ecke
WinForms - Automatische Formgrößenanpassung an Daten aus Textdatei
ProgBilly - Do 01.10.15 16:15
Titel: Automatische Formgrößenanpassung an Daten aus Textdatei
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
Th69: Titel geändert (war "WinForms - Daten auslesen aus einer .txt Datei")
Th69 - 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:
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 - 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 - 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
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
Th69: Code-Tags hinzugefügt
Th69 - 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) [
https://de.wikipedia.org/wiki/Model_View_Controller] /
MVP (Model-View-Presenter) [
https://de.wikipedia.org/wiki/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 [
http://www.bitel.net/dghm1164/programming/Kommunikation_von_2_Forms.html] 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 - 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
Th69: Beitragsformatierung überarbeitet.
Th69 - 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) [
http://www.mycsharp.de/wbb2/thread.php?threadid=21782] 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 - 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
ProgBilly - Mo 05.10.15 08:49
Ich danke Dir vielmals.
Mit diese Infos versuche ich jetzt die Sache anzugehen.
Gruß
Billy
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!