Entwickler-Ecke
WinForms - Consolenanwendung in eine WinFormsanwendung übersetzen
epsodus - Do 20.02.14 13:44
Titel: Consolenanwendung in eine WinFormsanwendung übersetzen
Hallo zusammen,
ich habe vor einiger Zeit angefangen C# zu lernen. Jetzt habe ich eine Konsolenanwendung geschrieben, mit der Hilfe eines Bekannten. Hierbei gab es auch Rückschläge aber der Lerneffekt war groß.
Leider habe ich mit Winforms ( Gui ) keine Erfahrung und versuche mir diese anzueignen. Aber manchmal ist man schwer von Begriff oder etwas dösig. Ich hoffe ihr könnt mir etwas helfen und ein paar Tipps zum Anfang geben. Ich weis nicht wie ich meine *.ini in eine Gui umsetzen soll.
Die Konsolenanwendung wird wie folgt aufgerufen :
"FileSearch.exe C:\etc\FileSearch.ini C:\ausgabe\FileSearch.txt" und folgendem Inhalt vonm FileSearch.ini
Filsearch.ini
Quelltext
1: 2: 3: 4:
| # Kommentar path=C:\temp\ mask=*.csv pattern=Suchmich |
Die Anwendung wird mit dem obrigen Aufruf gestartet. Es wird in der Filesearch.ini der Parameter " path " zum Verzeichnis aufgerufern. Dieses Verzeichnis wird auf Dateien ( mask ) mit der Endung*.csv
durchsucht. Jede Datei mit dieser Endung wird auf das Suchwort ( pattern ) " Suchmich " durchsucht. Sobald eine Datei mit dem Suchwort gefunden wurde, wird diese in eine *.txt Datei ( filesearch.txt )
geschrieben ( nur der Dateiname ) .
Dies würde ich gerne in eine C# Gui umsetzen. Anbei ein Bild meiner Gui und der Sourcecode von der Konsolenanwendung.
Ich hoffe auf ein paar Denkanstösse, ich möchte nur etwas Hilfe und keinen completten Code. Vielen Dank
Sourcecode :
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
| using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.IO;
namespace FileSearch { class Program { static int Main(string[] args) { string mask = "*.csv"; string pattern = "SUCHTEXT"; string sourcePath = @"C:\temp\";
FileStream fs; StreamReader reader; string config;
if (args.Length < 2) { Console.WriteLine("usage: FileSearch file.ini output.txt"); return 1; }
try { fs = File.Open(args[0], FileMode.Open, FileAccess.Read, FileShare.Read); reader = new StreamReader(fs); config = reader.ReadToEnd(); reader.Close(); } catch (Exception) { Console.WriteLine("Could not read %s", args[0]); return 2; }
if (config.Length > 0) { string[] lines = config.Split(new char[] { '\n' }); Dictionary<string, string> mysettings = new Dictionary<string, string>(); foreach (string line in lines) { if (! line.StartsWith("#")) { int i = line.IndexOf('='); if (i >= 0) { mysettings.Add( line.Substring(0,i).Trim() , line.Substring(i+1).Trim()); } } }
sourcePath = mysettings["path"]; mask = mysettings["mask"]; pattern = mysettings["pattern"]; }
var matches = Directory.GetFiles(sourcePath, mask, SearchOption.TopDirectoryOnly); string destFile = args[1];
StreamWriter txt; try { txt = new StreamWriter(File.Open(destFile, FileMode.Create, FileAccess.Write, FileShare.None)); } catch (Exception) { Console.WriteLine("Could not write %s", destFile); return 5; }
foreach (string file in matches) { string fileName = Path.GetFileName(file); StreamReader csv; try { csv = new StreamReader(File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)); } catch (Exception) { Console.WriteLine("Could not open %s", file); return 6; }
while (csv.Peek() >= 0) { string line = csv.ReadLine(); if (line.IndexOf(pattern) >= 0) { txt.WriteLine(fileName); break; } }
csv.Close(); }
txt.Close();
return 0; } } } |
Moderiert von
Th69: Code-Tags hinzugefügt
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - Do 20.02.14 14:05
Hallo und :welcome:
was genau ist denn deine Frage, d.h. woran hängst du?
Als Tipp kann ich dir als erstes geben, daß du dein Konsolenprogramm soweit umprogrammieren solltest, daß du Ein-/Ausgabe (Console) und Logik voneinander trennst (d.h. am besten eine eigene Klasse für die Logikfunktionen erzeugen).
Danach kannst du dann ein WinForms-Projekt anlegen und diese Klasse (bzw. die betreffende Datei) dann dem Projekt hinzufügen und in der Form-Klasse dann die Zugriffe darauf durchführen.
Wenn du jedoch noch keine Erfahrung mit WinForms hast, so solltest du erst einmal ein Testprojekt anlegen, um die grundsätzlichen Controls (wie Buttons, TextBox, ListBox etc.) kennenzulernen und besonders deren Ereignisse (Events), denn dies ist der Hauptunterschied zu einem Konsolenprogramm.
Du mußt dich bei WinForms von der "oben-nach-unten"-Denkweise lösen und ereignisorientiert programmieren (und denken)!
epsodus - Do 20.02.14 14:11
Hallo,
ich zitiere " Du mußt dich bei WinForms von der "oben-nach-unten"-Denkweise lösen und ereignisorientiert programmieren (und denken) " .
Da liegt wohl mein Problem. Ich versuche gerade die Abfrage der *.ini in Textboxen umzusetzen. Mal sehen was dort rauskommt.
Besser ich fange damit an :
" Ein-/Ausgabe (Console) und Logik voneinander trennst (d.h. am besten eine eigene Klasse für die Logikfunktionen erzeugen). "
Mal schauen wie ich das umgesetzt bekomme. Ich arbeite wohl zu unstrukturiert.
Danke für den Tip
epsodus - Do 20.02.14 18:05
Hallo,
sitze hier grüble, im Moment sehe ich den Wald vor lauter Bäumen nicht.
Kann mal jemand für mich hier den Anfang machen? Wie könnte ich die Anwendung als Gui umsetzetn ?
Mfg.
Volker
Christian S. - Do 20.02.14 18:16
Wo kommst Du denn nicht weiter?
Die Komponenten, die Du brauchst, sind:
- GroupBox
- Label
- TextBox
- Button
- CheckBox
- StatusStrip
Das Zusammenklicken ist dann nicht weiter schwer :-)
epsodus - Do 20.02.14 20:20
Hi,
1. Ich muss den Pfad ( Verzeichnis ) auswählen.
2. Die Dateiendung der zu durchsuchenden Datei vorgeben.
3. Das Entscheidungkriterium ( Suchwort ) angeben
4. Pfad und Namen für die Auslagerungsdatei angeben.
5. Startbutton
sehe ich das richtig ?
Ich muss jetzt mal klein anfangen und mal schauen wofür alle Komponenten da sind. Muss total umdenken.
Troubadix - Sa 22.02.14 15:10
Hallo epsodus.
Als erstes möchte ich dir empfehlen ein Grundlagenbuch durchzuarbeiten. Da gibt es sogar kostenlose E-Books im Netz. Da würde Dir nämlich schnell klar wo du lang must.
Nun zu Deinem Ansatz:
Jedes Control auf deiner Form kann verschiedene Ereignisse auslösen auf die du im Code reagieren kannst. In deinem Falle interessiert dich das Ereignis "Click" von deinem startbutton.
Mach mal im Designer einen Doppelclick auf den Startbutton. Der Designer legt dan nämlich automatisch das Abonement für das Ereignis Click und eine leere Behandlungsmethode an. Da drin kannst Du jetzt die Inhalte der Textboxen auswerten und deine Suche starten.
Ich hoffe das bringt dich auf die richtige Fährte.
Gruß
Troubadix
epsodus - Di 25.02.14 12:30
Hallo,
vielen vielen Dank für die Antworten. Bin leider am Freitag ins Krankenhaus gekommen und gerade wieder Zuhause. Ein Grundlagenbuch wurde schon bestellt und geliefert.
Ich werde mich jetzt mal Schritt für Schritt rantasten und ein Zwischergebnis einstellen. Hoffe dann auf rege Kritik und Verbesserungshinweisen.
MfG.
Volker
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!