ja, hab geschaut und verglichen. Ich benutze den Debugger. Habe einen wirklich groben Fehler geschnitzt und jetzt läuft zumindest die Ausgabe in Feld 3.
Allerdings entspricht das immer noch nicht vollständig meiner Aufgabenstellung.
"Damit die Lösung nicht zu aufwendig wird, sollen im zweiten Listenfeld immer nur die untergeordneten Schlüssel angezeigt werden. Im dritten Listenfeld dagegen sollen sowohl eventuell vorhandene Unterschlüssel als auch die Einträge angezeigt werden.
Bitte beachten Sie:
Für einige Unterschlüssel im Schlüssel HKEY_CURRENT_USER – wie zum Beispiel Console – gibt es nicht in jedem Fall weitere untergeordnete Schlüssel. Hier befinden sich auf der zweiten Ebene bereits Einträge. Es kann also durchaus sein, dass bei dem einen oder anderen Schlüssel das zweite Listenfeld leer bleibt."
Ich habe den Lehrer dazu gefragt:
"das sieht schon sehr gut aus. Es fehlen nur Details.
In der Methode listBox2_SelectedIndexChanged() beschaffen Sie sich die Schlüssel, wie Sie es für die listBox1 auch gemacht haben und fügen Sie als Items der dritten ListBox hinzu. Da gibt es noch keine Besonderheiten.
Die eigentlichen Einträge beschaffen Sie sich anschließend mit der Methode GetValueNames() als Array. Dieses durchlaufen Sie ebenfalls mit einer foreach-Schleife. Und fügen in jedem Schleifendurchlauf einen Eintrag und den Wert für diesen Eintrag, den Ihnen die Methode GetValue(eintrag) des RegistryKey-Objekts liefert, als Item in die ListBox3 ein.
Das ist schon alles. In der dritten Listbox stehen also zunächst die Schlüssel und darunter die Einträge in der Form "Eintrag = Wert"."
Mit dieser Formulierung werden die SubKeys nicht geholt.
Es müsste bestehen aus dem Key in Textfeld 1 plus Textfeld 2, was dann mit \\ den Pfad ergibt, aus dem die Subkeys geholt werden. Oder doch nicht?
Aufgabe:
Ändern Sie die Listenanzeige für die Registrierung aus dem Studienheft (Kapitel 1.5) so, dass der Anwender selbst auswählen kann, welche Schlüssel beziehungsweise Einträge im zweiten und dritten Listenfeld angezeigt werden.
Im ersten Listenfeld sollen immer fest die Einträge aus dem Schlüssel HKEY_CURRENT_USER angezeigt werden.
Achten Sie bitte darauf, dass die Einträge im zweiten beziehungsweise dritten Listenfeld nur dann angezeigt werden sollen, wenn im ersten beziehungsweise zweiten Listenfeld ein Eintrag markiert ist.
Damit die Lösung nicht zu aufwendig wird, sollen im zweiten Listenfeld immer nur die untergeordneten Schlüssel angezeigt werden. Im dritten Listenfeld dagegen sollen sowohl eventuell vorhandene Unterschlüssel als auch die Einträge angezeigt werden.
Bitte beachten Sie:
Für einige Unterschlüssel im Schlüssel HKEY_CURRENT_USER – wie zum Beispiel Console – gibt es nicht in jedem Fall weitere untergeordnete Schlüssel. Hier befinden sich auf der zweiten Ebene bereits Einträge. Es kann also durchaus sein, dass bei dem einen oder anderen Schlüssel das zweite Listenfeld leer bleibt.
using Microsoft.Win32;
using 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;
namespace CSHP12D_1._5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ButtonEinlesen_Click(object sender, EventArgs e)
{
//ein Array mit Zeichenketten für die Schlüssel
string[] regSchluesselListe;
//ein Array mit Zeichenketten für die Einträge
string[] regEintragListe;
//den Inhalt der drei Listenfelder löschen
listBox1.Items.Clear();
listBox2.Items.Clear();
listBox3.Items.Clear();
//die Schlüssel aus HKEY_CURRENT_USER holen
regSchluesselListe = Registry.CurrentUser.GetSubKeyNames();
//und in das erste Listenfeld eintragen
foreach (string eintrag in regSchluesselListe)
listBox1.Items.Add(eintrag);
//den Schlüssel Software öffnen
using (RegistryKey regSchluessel = Registry.CurrentUser.OpenSubKey("Software"))
{
//und jetzt alle Unterschlüssel für Software lesen
regSchluesselListe = regSchluessel.GetSubKeyNames();
}
//in das zweite Listenfeld eintragen
foreach (string eintrag in regSchluesselListe)
listBox2.Items.Add(eintrag);
//den Schlüssel \Software\Registrierungsdemo öffnen
using (RegistryKey regSchluessel = Registry.CurrentUser.OpenSubKey("Software\\RegistryDemo"))
{
//die Einträge lesen
regEintragListe = regSchluessel.GetValueNames();
//die Namen und die Werte in das dritte Listenfeld schreiben
foreach (string eintrag in regEintragListe)
listBox3.Items.Add(eintrag + " = " + Convert.ToString(regSchluessel.GetValue(eintrag)));
}
}
}
}
Ich weiß nicht, welche Schlüssel genau gemeint sind, die der Anwender selbst auswählen soll.. Hat jemand eine Idee was da umgesetzt werden soll?
Würde mir wahnsinnig weiter helfen. Ich hab die Einheit gut abgeschlossen, habe einen Notenschnitt insgesamt von 1,3, hänge aber leider immer wieder an den Fragstellungen.
ich habe ein Problem, mehr mit Windows Forms als mit C#, denke ich.
Folgender Sachverhalt:
Es gibt ein Spielfeld, welches in der Größe verändert werden kann.
Hierfür gibt es ein Menü mit 4 Radiobuttons der jeweiligen Größe.
Die jeweils aktuell gesetzte Einstellung soll nun korrekt markiert werden und nicht auf den Anfangsbutton zurückspringen.
Das ist die Methode, die den jeweiligen Wert an das Spielfeld liefert.
public Point LiefereWert()
{
Point rueckgabe = new Point(0, 0);
if (radioButton320.Checked == true)
rueckgabe = new Point(320, 200);
if (radioButton640.Checked == true)
rueckgabe = new Point(640, 480);
if (radioButton1024.Checked == true)
rueckgabe = new Point(1024, 768);
if (radioButtonMaximal.Checked == true)
rueckgabe = new Point(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
return rueckgabe;
}
nun soll eben bei der Auswahl von zb. 640*480 auch beim nächsten Öffnen des Dialogs der zugehörige Radiobutton markiert sein. Momentan steht er dann auf 320*200.