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,
JayK


Moderiert von user profile iconraziel: Topic aus .NET verschoben am Sa 17.09.2005 um 22:04


WeBsPaCe - Do 23.06.05 22:11

Die ersten beiden Google Treffer:

:arrow: http://www.csharphelp.com/archives2/archive430.html
:arrow: http://www.csharphelp.com/archives/archive48.html

;)


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();
//      MessageBox.Show(tempsa[1]);      
      for (int i = 0; i == hcr.SubKeyCount; i++)
      {
//        MessageBox.Show(tempsa[i]);
        fileTypeList.Items.Add(String.Copy(tempsa[i]));
      }
      
    }

fileTypeList ist eine ListBox.

Moderiert von user profile iconraziel: 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

user profile iconBenBE 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 user profile iconraziel: Code- durch C#-Tags ersetzt


JayK - Fr 24.06.05 19:51

user profile iconMathiasSimmack 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,

user profile iconJayK hat folgendes geschrieben:
user profile iconBenBE 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.

C#-Quelltext
1:
i < hcr.SubKeyCount                    

wäre also richtig, dann läuft die Schleife solange, wie i < hcr.SubKeyCount ist, also bis Count-1.

Holger

Moderiert von user profile iconraziel: Code- durch C#-Tags ersetzt


JayK - Fr 24.06.05 20:21

user profile iconHolgerwa 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.

Quelltext
1:
i < hcr.SubKeyCount                    

: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

user profile iconJayK 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();