Entwickler-Ecke
WinForms - Autovervollstädigung aus Datei
masterZed - Mi 18.02.09 15:42
Titel: Autovervollstädigung aus Datei
hallo Gemeinde,
ich möchte gerne ganz simple, das meine Textbox die "Autovervollständigung" aus meiner *.txt Datei übernimmt.
zum Testen nahm ich dies hier:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.TextChanged += new EventHandler(texBox1_TextChanged);
col1.AddRange(new string[] { "testa boria", "hello boris" });
textBox1.AutoCompleteCustomSource = col1; textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; } AutoCompleteStringCollection col1 = new AutoCompleteStringCollection(); AutoCompleteStringCollection col2 = new AutoCompleteStringCollection(); |
Nun, jetzt möchte ich gerne das er das ganze einfach aus der Datei liest!!
Jemand einen kleine Tipp wie ich vorgehen kann ?
vielen Dank
Moderiert von
Christian S.: Quote- durch C#-Tags ersetzt
Console.Beep() - Mi 18.02.09 15:51
Du wärst schneller zu deiner Antwort gekommen wenn du die Google suche benutzt oder die hilfe von msdn genutzt hättest
Zum Lesen von Dateien gebe ich dir nur ein Tipp: der Schlüssel liegt bei System.IO
Schau dir die dort befindlichen Klassen an
bakachan - Mi 18.02.09 15:54
Dein Prinzip sollte doch klar sein:
1. Strings aus der Datei auslesen
2. Strings in die AutoCompleteCustomSource stecken
Zum Auslesen wurde ja schon der Tip System.IO Namespace gegeben (besonders die File Klasse darin ist für dich interessant) und das hinzufügen zu CustomSource sollte ja kein Problem sein.
masterZed - Mi 18.02.09 16:04
bakachan hat folgendes geschrieben : |
Dein Prinzip sollte doch klar sein:
1. Strings aus der Datei auslesen
2. Strings in die AutoCompleteCustomSource stecken
Zum Auslesen wurde ja schon der Tip System.IO Namespace gegeben (besonders die File Klasse darin ist für dich interessant) und das hinzufügen zu CustomSource sollte ja kein Problem sein. |
Erstmal besten Dank für die schnelle Antwort. Da ich noch etwas frisch in der Sachen bin würde es mich denoch freuen wenn Du mir ein kleines Bsp. für die übergabe von Stream in die CustomSource geben könntest.
ich bedanke mich...
Console.Beep() - Mi 18.02.09 16:12
Natürlich
Hier ein Beispiel:
http://msdn.microsoft.com/de-de/library/ms228592.aspx
etwas weiter unten kommt dann ein Bsp für c# in sachen I/O
eigendlich musst du nur File.ReadAllText() verwenden der gibt dir einen string aus
desweiteren solltest du dir Galileo openbook anschaun da werden alle grundlagen erklärt
bakachan - Mi 18.02.09 16:42
Console.Beep() hat folgendes geschrieben : |
| eigendlich musst du nur File.ReadAllText() verwenden der gibt dir einen string aus |
File.ReadAllLines wäre wohl sinnvoller das gibt dir gleich ein stringarray(ein string pro zeile in der datei) wieder hat also schon das passende format ums gleich reinzugeben
Edit: obwohl es kommt drauf an wie die vorgaben in der datei vorliegen falls pro vorgabe eine zeile ist dann File.ReadAllLines und falls es anders ist einfach mit File.ReadAllText und dann nachbearbeiten.
Falls du den umständlicheren weg über Streams gehen willst gibts die Klassen StreamReader und TextReader
bakachan - Mi 18.02.09 17:03
Der meiner meinung nach schönste weg wäre wenn es in der Textdatei zeilenweise vorliegt:
C#-Quelltext
1: 2:
| textBox.AutoCompleteCustomSource.Clear(); textBox.AutoCompleteCustomSource.AddRange(System.IO.File.ReadAllLines(path)); |
masterZed - Mi 18.02.09 17:29
bakachan hat folgendes geschrieben : |
Der meiner meinung nach schönste weg wäre wenn es in der Textdatei zeilenweise vorliegt:
C#-Quelltext 1: 2:
| textBox.AutoCompleteCustomSource.Clear(); textBox.AutoCompleteCustomSource.AddRange(System.IO.File.ReadAllLines(path)); | |
Du hast es auf den Punkt gebracht, das hatte mir gefällt :)
Euch beiden, ein großen Dank für die schnelle Hilfe.
Kleinen frage noch weil es gerade so schön ist.
Nun er leist mir jetzt die ganze Zeile ein (besteht aus 5 Wörtern, getrennt durch komma) und gibt mir dies zur Auswahl an. Es würde mir ausreihen wenn er mir nur das Erste Wort jeder Zeile anbieten würde.
Kleiner Hinweis?
nochmals großen Dank
bakachan - Mi 18.02.09 17:39
Dann geht es leider nicht ganz so schön.
eigenes string[] anlegen und den inhalt der datei entsprechend aufsplitten wie du es haben willst
wenn du jedes wort einzeln haben willst les dir die datei mit File.ReadAllText ein und zerleg es entsprechend(hinweis: string.Split())
masterZed - Do 19.02.09 17:19
bakachan hat folgendes geschrieben : |
Dann geht es leider nicht ganz so schön.
eigenes string[] anlegen und den inhalt der datei entsprechend aufsplitten wie du es haben willst
wenn du jedes wort einzeln haben willst les dir die datei mit File.ReadAllText ein und zerleg es entsprechend(hinweis: string.Split()) |
Hi,
das spliten sollte so gehen sein oder?
| Zitat: |
FileStream oFile = new FileStream(DatenPfad, FileMode.Open, FileAccess.ReadWrite);
StreamReader oStream = new StreamReader(oFile);
String tmp = oStream.ReadLine();
String[] line = tmp.Split(Convert.ToChar(",")); |
um meine Sachen zu vervollständigen, was fehlt mir noch?
danielf - Do 19.02.09 17:32
C#
1: 2:
| AutoCompleteStringCollection acsc = new AutoCompleteStringCollection(); acsc.AddRange(File.ReadAllText(Form1.sAutoCompleteDBName).Split(';')); |
masterZed - Do 19.02.09 17:38
danielf hat folgendes geschrieben : |
C# 1: 2:
| AutoCompleteStringCollection acsc = new AutoCompleteStringCollection(); acsc.AddRange(File.ReadAllText(Form1.sAutoCompleteDBName).Split(';')); | |
oh man... jetzte gehts.
vielen Dank für die mega schnelle Antwort.
ps. Er liest mir mit nur den Ersten String der Zeile eine. Wie sieht das aus wenn er mir den Ersten der gesamten Spalten anzeigen soll?
Kha - Do 19.02.09 20:25
Dazu benutzt du ReadAllLines, rufst für jede Zeile Split auf und fügst das erste Element des Split-Arrays deiner acsc hinzu.
masterZed - Fr 20.02.09 11:52
Kha hat folgendes geschrieben : |
| Dazu benutzt du ReadAllLines, rufst für jede Zeile Split auf und fügst das erste Element des Split-Arrays deiner acsc hinzu. |
Ein Beispiel sagt mir mehr als 1000 Worte :)
bitte um ein kleine example.
danielf - Fr 20.02.09 12:10
Aus dem Kopf raus ...
C#
1: 2: 3: 4: 5: 6: 7: 8:
| AutoCompleteStringCollection acsc = new AutoCompleteStringCollection();
string[] fileContent = File.ReadAllLines();
foreach (string fileLine in fileContent) { acsc.Add(fileLine.Split(';')[0]); } |
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
masterZed - Fr 20.02.09 13:43
danielf hat folgendes geschrieben : |
Aus dem Kopf raus ...
C# 1: 2: 3: 4: 5: 6: 7: 8:
| AutoCompleteStringCollection acsc = new AutoCompleteStringCollection();
string[] fileContent = File.ReadAllLines();
foreach (string fileLine in fileContent) { acsc.Add(fileLine.Split(';')[0]); } | |
vielen Dank, jetzt bin ich "ERSTMAL" am Ziel.
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
masterZed - Mo 23.02.09 16:59
Etwas habe ich vergesen und zwar was fehlt, damit der Text nach dem Speichern aktualiesiert wird?
Sprich, die Autovervollständigung erkennt den neuen Eintrag erst nach einem restart.
danke
masterZed - Mi 25.02.09 09:20
Genau, das könnnte es sein...
masterZed - So 01.03.09 23:25
hmm, ich verstehe nicht genau wie ich den Filewatcher sagen soll, damit er auf meine änderung der Datei reagiert und somit die Autovervollständigung sofort aktualiesiert wird.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| FileSystemWatcher watcher = new FileSystemWatcher(Environment.SystemDirectory); watcher.Filter = "*.txt"; watcher.Path = @"c:\"; watcher.IncludeSubdirectories = true; watcher.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.Size;
watcher.Changed += new FileSystemEventHandler(watcher_Changed); |
Für eine Beispiel bin ich immer dankbar.
thanks all
Moderiert von
Christian S.: Quote- durch C#-Tags ersetzt
JüTho - Mo 02.03.09 09:44
Hallo,
Dein Code ist doch bestimmt nicht vollständig, oder? Was macht denn watcher_Changed? In der SDK-Doku/MSDN lese ich, dass eine Instanz der WaitForChangedResult-Klasse erstellt werden muss; wo ist die bei Dir?
In der SDK-Doku/MSDN gibt es auch (fast immer) die von Dir gewünschten Beispiele.
Jürgen
masterZed - Mo 02.03.09 20:33
JüTho hat folgendes geschrieben : |
Hallo,
Dein Code ist doch bestimmt nicht vollständig, oder? Was macht denn watcher_Changed? In der SDK-Doku/MSDN lese ich, dass eine Instanz der WaitForChangedResult-Klasse erstellt werden muss; wo ist die bei Dir?
In der SDK-Doku/MSDN gibt es auch (fast immer) die von Dir gewünschten Beispiele.
Jürgen |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public static void watcher_changed(object source, FileSystemEventArgs e) { MessageBox.Show("test", e.FullPath); } WaitForChangedResult result = watcher.WaitForChanged(WatcherChangeTypes.Created); |
Das habe ich soweit auch, leider noch keine Erfolg...
Kha - Mo 02.03.09 21:57
JüTho hat folgendes geschrieben : |
| In der SDK-Doku/MSDN lese ich, dass eine Instanz der WaitForChangedResult-Klasse erstellt werden muss; wo ist die bei Dir? |
WaitForChanged ist synchron, aber es geht ja wahrscheinlich um asynchrone Verarbeitung.
@
masterZed: EnableRaisingEvents hast du aber schon gesetzt? Und was hat deine Datei im System32-Ordner zu suchen :gruebel: ?
masterZed - Mo 02.03.09 22:09
denke schon....
C#-Quelltext
1:
| watcher.EnableRaisingEvents = true; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!