Entwickler-Ecke
C# - Die Sprache - Comboxbox mit daten aus einer Textdatei füllen
Raffa1989 - Fr 30.01.09 13:02
Titel: Comboxbox mit daten aus einer Textdatei füllen
Das ist der Code fürs einelesen von Der configfile
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:
| public void ReadConf() { ConfigFile = "D:/test/cfg.txt"; StreamReader SR = new StreamReader(ConfigFile); string Record = null; NumPak = -1; for (I = 0; I <= MaxPak; I++) { NumPrg[I] = -1; Gruppe[I] = ""; for (J = 0; J <= MaxPrg; J++) { Progname[I, J] = ""; Progpath[I, J] = ""; } } Record = SR.ReadLine(); while (SR.Peek() != -1) { if (Record == "[EDITOR]") { Editor = SR.ReadLine(); Record = SR.ReadLine(); } else if (Record == "[VIEWER]") { Viewer = SR.ReadLine(); Record = SR.ReadLine(); } else if (Record == "[POSTSCRIPT]") { PSViewer = SR.ReadLine(); Record = SR.ReadLine(); } else if (Record == "[PSVIEWER]") { PSViewer = SR.ReadLine(); Record = SR.ReadLine(); } else if (Record.StartsWith("[PAKET")) { I = Record.Length; NumPak = NumPak + 1; Gruppe[NumPak] = Record.Substring(7, (I - 8)); while(SR.Peek() != -1) { SR.Close(); } Record = SR.ReadLine(); if (Record.StartsWith("[PAKET")) { break; } else { string[] Item = Record.Split(new Char[] { ';' }); NumPrg[NumPak] = NumPrg[NumPak] + 1; Progname[NumPak, NumPrg[NumPak]] = Item[0]; Progpath[NumPak, NumPrg[NumPak]] = Item[1]; } } } SR.Close(); } |
son nun die Combobox:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public void cmbpchanged(object sender, EventArgs e) { ActPak = cmbprogp.SelectedIndex; cmbprog.Items.Clear(); for (J = 0; J <= NumPrg[ActPak]; J++) { cmbprog.Items.Add(Progname[ActPak, J]); } } |
meine Combobox wird immer mit einer 0 gefüllt
könnt ihr mir vil sagen wo der fehler ist??
falls jemand ne Idee hat bitte posten;)
mfg
Raffa
Th69 - Fr 30.01.09 13:13
Bitte pack deinen Code in C#-Tags (und verwende am besten zuerst die Vorschau bevor du den Betrag absendest).
Raffa1989 - Fr 30.01.09 15:30
ok hab ich gemacht sry bin neu hier :)
JüTho - Fr 30.01.09 15:39
Hallo,
wenn Du es als C# (statt "allg.Code") markieren würdest, wäre es noch besser lesbar.
Zum Verständnis: Könntest Du bitte noch die Deklarationen von NumPrg[] und Progname[] angeben? Vielleicht wäre es auch hilfreich, wenn Du deren Verwendung kurz erklären könntest. Wie werden die Arrays initialisiert, stehen immer Werte drin?
Weil ActPak nur im EventHandler von Bedeutung ist, sollte er dort als int deklariert werden und nicht allgemein gültig sein. Gleiches gilt erst recht für die Laufvariablen I und J in for-Schleifen.
Zum Lesen von Textdateien ist meistens File.ReadAllLines (oder ReadAllText) praktischer.
Gruß Jürgen
jaenicke - Fr 30.01.09 15:42
Was mir sofort auffällt:
C#-Quelltext
1: 2: 3: 4: 5:
| while(SR.Peek() != -1) { SR.Close(); } Record = SR.ReadLine(); |
Sollte der Stream bei dem ReadLine so nicht bereits geschlossen sein?
Raffa1989 - Fr 30.01.09 16:03
danke für die schnellen antworten
ne -1 ist wenn er am ende angekommen ist da != -1 wird er ja weiter ausgeführt oder nicht??
und zu den variablen die sind hier
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| public static int MaxPak = 10; public static int MaxPrg = 10; public static int ActPak; public static int ActProg; public static int NumPak; public static int[] NumPrg = new int[MaxPak + 1]; public static string[] Gruppe = new string[MaxPak + 1]; public static string[,] Progname = new string[MaxPak,MaxPrg]; public static string[,] Progpath = new string[MaxPak,MaxPrg]; public static int[,] Pipeline = new int[MaxPak,MaxPrg]; public static string ConfigFile; public static string Editor; public static string Viewer; public static string PSViewer; public static string InputFile; public static string WorkDirectory; public static string OutputFile; public static string TempFile; public static int I; public static int J; |
NumPak ist die Nummer der Pakete welche ich in der Combobox ausgeben will
Raffa1989 - Fr 30.01.09 16:22
ehm ja du hast recht mit dem streamreader ich hab es jetzt ma in ner if schleife gesetzt
C#-Quelltext
1: 2: 3: 4:
| if (SR.Peek() == -1) { SR.Close(); } |
aber es bringt trz nix daran liegts nicht^^
trz danke
danielf - Fr 30.01.09 16:38
Hallo,
zum parsen von ini-Files mit Kategorien würde ich die Kernel32 library verwenden ( siehe
http://jachman.wordpress.com/2006/09/11/how-to-access-ini-files-in-c-net/ ).
Dann brauchst du nicht so einen statischen Konstrukt pflegen.
Wenn du das umgeschrieben hast sollte es einfach sein die Kategorieren und Key-Values zu verwarbeiten.
Btw.: die würde ich nicht in eine ComboBox, sondern in ein ListView anzeigen. Ab Windows XP kann das Gruppierungen und du hast es ziemlich schick ...
Gruß Daniel
PS: Ach
http://www.codeproject.com/KB/cs/cs_ini.aspx sind die Library-Zugriffe für .net schon als Klasse gekapselt.
JüTho - Fr 30.01.09 18:02
Hallo Raffa,
tut mir leid, ich verstehe Dein ganzes Vorgehen nicht. Was soll eigentlich in den Arrays eingetragen und später ausgelesen werden? Vielleicht kannst Du es mit ein paar Beispieltexten deutlich machen.
Unabhängig davon solltest Du Dich schleunigst von den Unmengen statischer Variablen verabschieden. Eine Variable wird mit möglichst kleinem Gültigkeitsbereich festgelegt und nur dort deklariert, wo sie benötigt wird. Beispiel:
C#-Quelltext
1:
| for(int x1 = 0; x1 < myArray.Length; x1++) { ... } |
Arrays sollten nur dort benutzt werden, wo es sich wirklich um eine feste Größe handelt. Wenn es sich um variable Daten handelt, ist
List<T> besser. Wenn Deine Ini-Datei auf einmal 12 Rubriken enthält, bekommst Du ständig IndexOutOfRangeExceptions oder musst das Programm an vielen Stellen anpassen (von denen man mit Sicherheit die oder andere vergisst).
Gruß Jürgen
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!