Hashtable.add geht nicht in Schleife ?

Asterix-Ac

Erfahrenes Mitglied
Hallo Zusammen,

da ich eigentlich bisher keinen Hashtable nutzen musste, ist mir aufgefallen, dass Schleifen und Hashtable ein komisches Verhältnis zueinander haben. Anscheinend sind alle Schleifen nur ein Wrapper um den Hashtable und man kann nicht mehr darin schreiben.
Welche Möglichkeit habe ich nun, z.B. 30 Einträge in den Table zu bekommen, ohne 30x add schreiben zu müssen?

Asterix
 
Ich versteh das Problem nicht ganz.
Das funktioniert doch einwandfrei!
C#:
Hashtable ht = new Hashtable();
for (int i = 0; i < 30; i++)
{
   ht.Add(i, "val" + i.ToString());
}
for (int i = 0; i < 30; i++)
{
   Console.WriteLine(ht[i]);
}
 
Hi,

aber irgendwas mache ich falsch. Ich komme aber nicht dahinter.
Ich habe einen TreeView in dem ich das DateiSystemabbilde.
Bei TreeAfterSelect habe ich folgenden Codeschnipsel :

Code:
				this.FileList.Clear();
				foreach(string file in Directory.GetFiles(e.Node.FullPath))
				{
//					MessageBox.Show(file.Substring(file.LastIndexOf(".")+1));
					if(file.Substring(file.LastIndexOf(".")+1).ToLower() == "bmp" || file.Substring(file.LastIndexOf(".")+1).ToLower() == "jpg" || file.Substring(file.LastIndexOf(".")+1).ToLower() == "jpeg" || file.Substring(file.LastIndexOf(".")+1).ToLower() == "gif" || file.Substring(file.LastIndexOf(".")+1).ToLower() == "png" || file.Substring(file.LastIndexOf(".")+1).ToLower() == "ico" || file.Substring(file.LastIndexOf(".")+1).ToLower() == "emf" || file.Substring(file.LastIndexOf(".")+1).ToLower() == "wmf" || file.Substring(file.LastIndexOf(".")+1).ToLower() == "tif" || file.Substring(file.LastIndexOf(".")+1).ToLower() == "tiff")
	                {
						this.FileList.Add(file);						
	                }					
				}
//--- descript.ion Hashtable erstellen nach Vezeichniswechsel
				this.bildBeschreibung = new Hashtable(FileList.Count);
				for(int i=0;i<FileList.Count-1;i++)
				{
					this.bildBeschreibung.Add(FileList[i],"");
				}
Darin lade ich im ListView die Image-Dateien, die im angegebenen Verzeichnis sind. Gleichzeitig fülle ich die ArrayList 'FileList' mit den Dateinamen und den Hashtable. Doch das scheint nicht zu klappen. Der Hashtable ist immer leer.
und dann habe ich noch einen MenueItem, wo ich einen Dialog aufrufe, der ein Textfeld einthält, dass ich verwende (bildBeschreibung ist übrigens der Hashtable) :

Code:
void MnuDateiBildBeschreibungClick(object sender, EventArgs e)
		{
			string pfad = this.treeView1.SelectedNode.FullPath;
			if(pfad.Length > 3 && pfad.Substring(2,1) == @"\")
				pfad = pfad.Remove(3,1);
			TextWriter tw = new StreamWriter(pfad+@"\descript.ion");
			Bildbeschreibung bbs = new Bildbeschreibung(this.lvFiles.SelectedItems[0].Text);
			DialogResult dr = bbs.ShowDialog();
			if(dr == DialogResult.OK)
			{
				if(this.bildBeschreibung.ContainsKey(this.lvFiles.SelectedItems[0].Text) == true)
				{
					this.bildBeschreibung[this.lvFiles.SelectedItems[0].Text] = bbs.txtBeschreibung.Text;
					MessageBox.Show(this.bildBeschreibung[this.lvFiles.SelectedItems[0].Text].ToString());
				}
				
				string line;
				IDictionaryEnumerator Enumerator = this.bildBeschreibung.GetEnumerator();
				while (Enumerator.MoveNext())
				{
					if(Enumerator.Value.ToString() != "")
					{
						line = "\""+Enumerator.Key.ToString()+"\" "+Enumerator.Value.ToString();
						tw.WriteLine(line);
					}
				}
				
				tw.Flush();
				tw.Close();
			}
		}

Nach der Rückgabe sollte in der Datei 'descript.ion' eine Beschreibung stehen. Doch das tut es nicht. Ich habe nach der Abfrage bildBeschreibung.ContainsKey eine MessageBox eingebaut, doch die wird nicht ausgegeben, was soviel bedeutet, dass der Eintrag gar nicht gemacht wurde, was mich auf 'Hashtable.add in Schleife geht nicht' gebracht hat.

Also, wo könnte mein Fehler liegen?

Asterix
 
Hallo Leute,

ich habe meinen Fehler gefunden.
in 'FileList' habe ich den kompletten Pfad aufgenommen und im Hashtable habe ich nur nach dem DAteinamen gesucht. Klar, dass ich den Key nicht finden konnte.

Manchmal findet man den Wald vor lauter Bäumen nicht :)

Asterix
 

Neue Beiträge

Zurück