Benutzer mit den meisten Antworten
RegSchlüssel in drei Listboxen anzeigen

Frage
-
Hallo,
Ich krüble jetzt seid stunden und tagen an der Lösung meines Problems.
Ich möchte in einer Form mit drei Listboxen die Registrierungschlüssel und Unterschlüssel anzeigen lassen.
Wobei ich in der ersten Listbox alle Schlüssel von HKEY_CURRENT_USER öffne, die möchte ich dan mit hilfe SelectItem in der Zweiten und Dritten Listbox anzeigen lassen.
Nun ja das Öffnen der Hauptschlüssel von HKEY_CURRENT_USER in Listbox1. funktioniert.
Das Öffnen mit SelectItem aus Listbox 1 in Listbox 2 Funktioniert auch einwandfrei,
wenn ich aber dan mit SelectetItem von Listbox 2 die Unterschlüssl anzeigen lassen möchte bringt mir dwer kompiller eine fehler meldung
Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" ist in RegistrierungsDemo.exe aufgetreten.
Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.Wer könnte mir da auf die Sprünge helfen.
Ich Programmiere mit VS in C#
der dazugehörige Code:
System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Win32; namespace RegistrierungsDemo { public partial class Form1 : Form { //ein Arry mit Zeichenketten für die Schlüssel string[] regSchluesselListe; //ein Arry mit Zeichenketten für die Einträge string[] regEintragListe; //eine Variable der Klasse RegistryKey RegistryKey regSchluessel; public Form1() { InitializeComponent(); } private void buttonEinlesen_Click(object sender, EventArgs e) { //den Inhalt der drei Listenfelder löschen listBox1.Items.Clear(); listBox2.Items.Clear(); listBox4.Items.Clear(); //die Schlüssel aus HKEY_CURRENT_USER holen regSchluesselListe = Registry.CurrentUser.GetSubKeyNames(); //in das erste Listenfeld eintragen foreach (string eintrag in regSchluesselListe) listBox1.Items.Add(eintrag); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { //den Schlüssel des ausgewählten Eintrag öffnen regSchluessel=Registry.CurrentUser.OpenSubKey(listBox1.SelectedItem.ToString()); regSchluesselListe = regSchluessel.GetSubKeyNames(); //in das zweite Listenfeld eintragen foreach (string eintrag in regSchluesselListe) listBox2.Items.Add(eintrag); } private void listBox2_SelectedIndexChanged(object sender, EventArgs e) { regSchluessel = Registry.CurrentUser.OpenSubKey(listBox2.SelectedItem.ToString()); regEintragListe = regSchluessel.GetValueNames(); foreach (string eintrag in regEintragListe) if (regEintragListe == null) { MessageBox.Show(" Leider kein Schlüssel vorhanden"); } else listBox4.Items.Add(eintrag + " = " + Convert.ToString(regSchluessel.GetValueKind(eintrag))); } private void button1_Click(object sender, EventArgs e) { Application.Exit(); } } }
- Bearbeitet jonnywhite7 Dienstag, 15. März 2016 09:58
Antworten
-
Hallo,
1.
der erste Event "listBox1_SelectedIndexChanged" fügt die Subitems aus dem selektierten Subitem der ersten Liste der zweiten hinzu.
Allerdings ohne den Inhalt vorher zu löschen, dadurch sind auch alle zuvor hinzugefügten Eintäge noch vorhanden, ist das wirklich so gewollt?
Ich denke hier fehlt noch ein "listBox2.Items.Clear();" vor dem hinzufügen:private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listBox2.Items.Clear();
//den Schlüssel des ausgewählten Eintrag öffnen
regSchluessel = Registry.CurrentUser.OpenSubKey(listBox1.SelectedItem.ToString());
regSchluesselListe = regSchluessel.GetSubKeyNames();
//in das zweite Listenfeld eintragen
foreach (string eintrag in regSchluesselListe)
listBox2.Items.Add(eintrag);
}2.
Der Event der zweiten Liste (der dann auch den Absturz verursacht) versucht den Subkey aus der zweiten Liste direkt in Current User zu öffnen, der aber nicht vorhanden ist, da es sich um einen Subkey der ersten Liste handelt (nicht direkt einen Subkey im root). Außerdem wird die Liste (wie auch oben) beim Auswählen nicht geleert, deshalb müsste der Code vermutlich so aussehen:private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
listBox4.Items.Clear();
string Schluessel = listBox1.SelectedItem.ToString() + "\\" + listBox2.SelectedItem.ToString();
regSchluessel = Registry.CurrentUser.OpenSubKey(Schluessel);
if (regSchluessel == null)
{
MessageBox.Show(" Leider kein Schlüssel vorhanden");
}
else
{
regEintragListe = regSchluessel.GetValueNames();
foreach (string eintrag in regEintragListe)
if (regEintragListe == null)
{
MessageBox.Show(" Leider kein Schlüssel vorhanden");
}
else
listBox4.Items.Add(eintrag + " = " + Convert.ToString(regSchluessel.GetValueKind(eintrag)));
}
}Gruß
- Als Antwort vorgeschlagen BjoernBoeckle Dienstag, 15. März 2016 10:50
- Nicht als Antwort vorgeschlagen BjoernBoeckle Dienstag, 15. März 2016 10:50
- Als Antwort vorgeschlagen BjoernBoeckle Dienstag, 15. März 2016 10:50
- Als Antwort markiert jonnywhite7 Freitag, 18. März 2016 09:40
Alle Antworten
-
Hallo,
1.
der erste Event "listBox1_SelectedIndexChanged" fügt die Subitems aus dem selektierten Subitem der ersten Liste der zweiten hinzu.
Allerdings ohne den Inhalt vorher zu löschen, dadurch sind auch alle zuvor hinzugefügten Eintäge noch vorhanden, ist das wirklich so gewollt?
Ich denke hier fehlt noch ein "listBox2.Items.Clear();" vor dem hinzufügen:private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listBox2.Items.Clear();
//den Schlüssel des ausgewählten Eintrag öffnen
regSchluessel = Registry.CurrentUser.OpenSubKey(listBox1.SelectedItem.ToString());
regSchluesselListe = regSchluessel.GetSubKeyNames();
//in das zweite Listenfeld eintragen
foreach (string eintrag in regSchluesselListe)
listBox2.Items.Add(eintrag);
}2.
Der Event der zweiten Liste (der dann auch den Absturz verursacht) versucht den Subkey aus der zweiten Liste direkt in Current User zu öffnen, der aber nicht vorhanden ist, da es sich um einen Subkey der ersten Liste handelt (nicht direkt einen Subkey im root). Außerdem wird die Liste (wie auch oben) beim Auswählen nicht geleert, deshalb müsste der Code vermutlich so aussehen:private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
listBox4.Items.Clear();
string Schluessel = listBox1.SelectedItem.ToString() + "\\" + listBox2.SelectedItem.ToString();
regSchluessel = Registry.CurrentUser.OpenSubKey(Schluessel);
if (regSchluessel == null)
{
MessageBox.Show(" Leider kein Schlüssel vorhanden");
}
else
{
regEintragListe = regSchluessel.GetValueNames();
foreach (string eintrag in regEintragListe)
if (regEintragListe == null)
{
MessageBox.Show(" Leider kein Schlüssel vorhanden");
}
else
listBox4.Items.Add(eintrag + " = " + Convert.ToString(regSchluessel.GetValueKind(eintrag)));
}
}Gruß
- Als Antwort vorgeschlagen BjoernBoeckle Dienstag, 15. März 2016 10:50
- Nicht als Antwort vorgeschlagen BjoernBoeckle Dienstag, 15. März 2016 10:50
- Als Antwort vorgeschlagen BjoernBoeckle Dienstag, 15. März 2016 10:50
- Als Antwort markiert jonnywhite7 Freitag, 18. März 2016 09:40