Laden...

Array aus einer Hashtable auslesen

Erstellt von PierreDole vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.643 Views
P
PierreDole Themenstarter:in
74 Beiträge seit 2017
vor 6 Jahren
Array aus einer Hashtable auslesen

Moin,
ich habe eine Hashtable mit Daten gefüttert, die ich selbstverständlich wieder auslesen möchte. Nun, das klappt nicht so, wie ich mir es vorstelle, eigentlich klappt es gar nicht.

Das sind die Daten. Erstmal testweise unvollständig erstellt.


// 0 = Location, 1 = Size
			this.keyboardLayout.Add("D1", new Point[2] { new Point(25, 32), new Point(23, 24) } );
			this.keyboardLayout.Add("D2", new Point[2] { new Point(51, 32), new Point(22, 24) } );
			this.keyboardLayout.Add("D3", new Point[2] { new Point(74, 32), new Point(23, 24) } );

Das hier ist der Ausleseversuch. Die Fehlermeldungen habe ich jeweils in die Zeilen als Kommentar eingefügt.

foreach(DictionaryEntry de in this.keyboardLayout)
	        {
				// create new picturebox obj
				PictureBox pb = new PictureBox();
				
				// init pb obj
				((System.ComponentModel.ISupportInitialize)(pb)).BeginInit();
				
				// define picturebox
				pb.BackColor = System.Drawing.Color.Transparent;
				Object[] p = de.Value; // Der Typ 'object' kann nicht implizit in 'object[]' konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.) (CS0266)
				pb.Location = (Point)de.Value[0]; // Indizierung mit [] kann nicht auf einen Ausdruck vom Typ 'object' angewendet werden. (CS0021)
				pb.Margin = new Padding(0);
				pb.Name = (string)de.Key;
				pb.Size = (Size)de.Value; 
				// pb.TabIndex = 4;
				pb.TabStop = false;
				
				
				Debug.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
	        }	

Egal wie ich es drehe und wende, de.Value wird nicht als Array erkannt - und habe schon viel daran gedreht und gewendet. Habs hin und her gecastet, habs über Deklarationsumwege versucht, keine Ahnung, kriege es irgendwie nicht hin.

16.806 Beiträge seit 2008
vor 6 Jahren

Hat das nen Grund, dass Du nicht mit Datenbindung arbeitest?
Das wäre der korrekte Weg, um auf die Daten zuzugreifen.

T
314 Beiträge seit 2013
vor 6 Jahren

DictionaryEntry ist eben so definiert, dass Key und Value vom Typ object sind.
Du kannst also entsprechend casten oder du nutzt einen geeigneteren Parametertypen wie z.B. KeyValuePair<string, Point[]> und statt der Hashtable ein Dictionary<string,Point[]>

1.040 Beiträge seit 2007
vor 6 Jahren
P
PierreDole Themenstarter:in
74 Beiträge seit 2017
vor 6 Jahren

Also "Datenbindung" musste ich erstmal googlen. 😃

Habs mit Directory gelöst. Das ging dann reibungslos. Und is/as habe ganz vergessen gehabt. Schade, hätte zumindest gesehen, ob es geklappt hätte. Aber jetzt bin ich mit meinem Programmchen fertig und wurstle nicht mehr dran.

Vielen Dank für die Hilfe.

T
2.219 Beiträge seit 2008
vor 6 Jahren

@PierreDole
Das ist meiner Meinung nach eine falsche Einstellung.
Wenn du programmieren willst, solltest du eine bestmögliche Qualität als Ziel haben.
Nur etwas hin wursteln, ist kein guter Anspruch an die eigene Qualität und Arbeit.
Vorallem wenn du dich später nochmal in dein Programm einarbeiten musst, wirst du feststellen wie wenig dir gewurstelterCode dir bringt.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

1.040 Beiträge seit 2007
vor 6 Jahren

Schade, hätte zumindest gesehen, ob es geklappt hätte.

Es funktioniert natürlich auch mit einem DictionaryEntry, vorausgesetzt man castet richtig. 😉

Point[] pointArray = dictionaryEntry.Value as Point[];

Du hast beim Casten immer zu viel auf einmal bzw. zu viel zu früh gemacht. =)

[FAQ] Casten aber richtig: () / is / as