Entwickler-Ecke
IO, XML und Registry - Windows Registry und C#
JayK - Do 23.06.05 22:06
Titel: Windows Registry und C#
Hallo,
wie kann ich in C# mit der Windows-Registry umgehen, bzw. wo gibbet da ein Tutorial?
Das DF-team ist ja mit Skylla noch nicht soweit, also muss ich es noch ins Delphi-Forum posten :)
Schonmal Danke im vorraus,
JayKModeriert von raziel: Topic aus .NET verschoben am Sa 17.09.2005 um 22:04
JayK - Do 23.06.05 22:48
Was ist dann an diesem Code falsch?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| void BLadenClick(object sender, System.EventArgs e) { Microsoft.Win32.RegistryKey hcr = Registry.ClassesRoot; fileTypeList.Items.Clear(); string[] tempsa = new string[hcr.SubKeyCount]; tempsa = hcr.GetSubKeyNames(); for (int i = 0; i == hcr.SubKeyCount; i++) { fileTypeList.Items.Add(String.Copy(tempsa[i])); } } |
fileTypeList ist eine ListBox.
Moderiert von raziel: Code- durch C#-Tags ersetzt
BenBE - Fr 24.06.05 10:20
muss das nicht i < hcr ... statt i==hcr. heißen???
JayK - Fr 24.06.05 16:04
BenBE hat folgendes geschrieben: |
muss das nicht i < hcr ... statt i==hcr. heißen??? |
Kann sein, aber das sollte doch nichts dran ändern. Die Werte sollen einfach der Listbox hinzugefügt werden, es rührt sich aber überhaupt nichts. Ich hatte, wie man sehen kann, auch schon was mit MessageBox drin. Die in der for Schleife hab ich nie zu Gesicht bekommen! Am .Clear() kommt er aber noch vorbei...
Delete - Fr 24.06.05 17:52
Bei mir geht es. Habe deinen Code nur mal kurz überflogen und so probiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| RegistryKey hkcr = Registry.ClassesRoot; listBox1.Items.Clear(); listBox1.BeginUpdate();
string[] tempSA = new string[hkcr.SubKeyCount]; tempSA = hkcr.GetSubKeyNames();
foreach(string currentName in tempSA) { listBox1.Items.Add(currentName); }
listBox1.EndUpdate(); |
Moderiert von raziel: Code- durch C#-Tags ersetzt
JayK - Fr 24.06.05 19:51
MathiasSimmack hat folgendes geschrieben: |
Bei mir geht es. Habe deinen Code nur mal kurz überflogen und so probiert:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| RegistryKey hkcr = Registry.ClassesRoot; listBox1.Items.Clear(); listBox1.BeginUpdate();
string[] tempSA = new string[hkcr.SubKeyCount]; tempSA = hkcr.GetSubKeyNames();
foreach(string currentName in tempSA) { listBox1.Items.Add(currentName); }
listBox1.EndUpdate(); | |
Ich kann es zwar jetzt gerade nicht probieren, aber: Strimmt! Mit einer foreach-Schleife geht das natürlich auch...! :autsch: Wird wohl noch eine Weile dauern, eh ich das auswendig kann mit dem C#.
Holgerwa - Fr 24.06.05 20:14
Hallo,
JayK hat folgendes geschrieben: |
BenBE hat folgendes geschrieben: | muss das nicht i < hcr ... statt i==hcr. heißen??? |
Kann sein, aber das sollte doch nichts dran ändern. Die Werte sollen einfach der Listbox hinzugefügt werden, es rührt sich aber überhaupt nichts. Ich hatte, wie man sehen kann, auch schon was mit MessageBox drin. Die in der for Schleife hab ich nie zu Gesicht bekommen! Am .Clear() kommt er aber noch vorbei... |
@JayK: BenBE hat Recht: Die Schleife
C#-Quelltext
1:
| for (int i = 0; i == hcr.SubKeyCount; i++) |
läuft nur solange, wie die Bedingung i==hcr.SubKeyCount erfüllt ist. Und das ist gleich bei der ersten Prüfung nicht der Fall (es sei denn, hcr.SubKeyCount wäre 0), deshalb wird die Schleife nie ausgeführt.
wäre also richtig, dann läuft die Schleife solange, wie i < hcr.SubKeyCount ist, also bis Count-1.
Holger
Moderiert von raziel: Code- durch C#-Tags ersetzt
JayK - Fr 24.06.05 20:21
Holgerwa hat folgendes geschrieben: |
@JayK: BenBE hat Recht: Die Schleife
Quelltext 1:
| for (int i = 0; i == hcr.SubKeyCount; i++) |
läuft nur solange, wie die Bedingung i==hcr.SubKeyCount erfüllt ist. Und das ist gleich bei der ersten Prüfung nicht der Fall (es sei denn, hcr.SubKeyCount wäre 0), deshalb wird die Schleife nie ausgeführt.
|
:idea: Stimmt! Bei C# ist das ja sowusagen ein "solange..."-Parameter und nicht wie bei Delphi ein "bis..." Vergleich... Danke für die Erinnerung ;)
EDIT: Auf Wunsch von MathiasSimmack die nicht benötigten Teile des Quotes entfernt...
Delete - Fr 24.06.05 20:32
Macht´s dir was aus, künftig nur noch die interessanten Teile eines Beitrags zu zitieren? :roll: Oder am besten überhaupt nicht, wenn vor dir keiner was antwortet. Danke.
Robert_G - Mi 28.09.05 01:04
JayK hat folgendes geschrieben: |
Was ist dann an diesem Code falsch? |
Was mir auffiel:
C#-Quelltext
1: 2:
| string[] tempsa = new string[hcr.SubKeyCount]; tempsa = hcr.GetSubKeyNames(); |
GetSubKeyNames liefert einen Array, der den du davor angelegt hast ist somit unnütz. ;)
Das ist übrigens ein schönes Beispiel dafür, wie einfach es einem .Net, speziell DataBinding, machen kann. ;)
Dein Code lässt sich auf einen Einzeiler reduzieren. :)
C#-Quelltext
1:
| fileTypeListBox.DataSource = Registry.ClassesRoot.GetSubKeyNames(); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!