Autor Beitrag
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Do 23.06.05 22:06 
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Do 23.06.05 22:11 
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Do 23.06.05 22:48 
Was ist dann an diesem Code falsch?
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 24.06.05 10:20 
muss das nicht i < hcr ... statt i==hcr. heißen???

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: 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...
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.06.05 17:52 
Bei mir geht es. Habe deinen Code nur mal kurz überflogen und so probiert:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 325

WIN XP Pro, Vista Business
Delphi 7 Pro, BDS 2006 Pro
BeitragVerfasst: 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
ausblenden 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 24.06.05 20:21 
user profile iconHolgerwa hat folgendes geschrieben:

@JayK: BenBE hat Recht: Die Schleife
ausblenden 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.
ausblenden 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...


Zuletzt bearbeitet von JayK am Fr 24.06.05 20:38, insgesamt 1-mal bearbeitet
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: Mi 28.09.05 01:04 
user profile iconJayK hat folgendes geschrieben:
Was ist dann an diesem Code falsch?

Was mir auffiel:
ausblenden 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. :)

ausblenden C#-Quelltext
1:
fileTypeListBox.DataSource = Registry.ClassesRoot.GetSubKeyNames();