Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Array aus einer Hashtable auslesen
PierreDole
myCSharp.de - Member



Dabei seit:
Beiträge: 44

Themenstarter:

Array aus einer Hashtable auslesen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16098

beantworten | zitieren | melden

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

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

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[]>
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von t0ms3n am .
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

Bzgl. casten: [FAQ] Casten aber richtig: () / is / as
private Nachricht | Beiträge des Benutzers
PierreDole
myCSharp.de - Member



Dabei seit:
Beiträge: 44

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1892
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

Zitat von PierreDole
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
private Nachricht | Beiträge des Benutzers