Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Narya88
Thema: Windows Forms - Registry - Pong
Am im Forum: Rund um die Programmierung

Die Einstellungen werden korrekt in die Registrierung geschrieben.

Ja, das Arbeiten mit der Registrierung ist vorgeschrieben. Ich studiere Softwareentwicklung mit C# und dies ist eine Aufgabenstellung.

Die Funktion LeseEinstellungen() hab ich jetzt kurz vor SetzeSpielfeld() gesetzt und jetzt übernimmt er die Einstellungen aus dem Key.

Zuvor hatte ich die Einstellungen direkt nach dem Initialisieren gesetzt, wo sie ja später noch durch die Standardwerte ersetzt werden.

dummer Anfängerfehler

Danke für eure Hilfe!

Thema: Windows Forms - Registry - Pong
Am im Forum: Rund um die Programmierung

Hallo!

Ich möchte die Einstellungen eines Spiels - Pong in der Registrierung speichern.
Dies sind die zugehörigen Methoden.


internal void SchreibeEinstellungen()
        {
            //den Schlüssel HKEY_CURRENT_USER\Software\RegistryPong
            //anlegen bzw. öffnen
            using (RegistryKey regSchluessel = Registry.CurrentUser.CreateSubKey("Software\\RegistryPong"))
            {
                //den Wert aus dem Eingabefeld in den Eintrag schreiben
                regSchluessel.SetValue("Breite", this.Width);
                regSchluessel.SetValue("Hoehe", this.Height);
                regSchluessel.SetValue("Schwierigkeit", this.schwierigkeit);
            }
        }

        internal void LeseEinstellungen()
        {
            //den Schlüssel
            //HKEY_CURRENT_USER\Software\RegistryPong öffnen
            using (RegistryKey regSchluessel = Registry.CurrentUser.OpenSubKey("Software\\RegistryPong"))
            {
                //wenn der Schlüssel nicht vorhanden ist, Default Werte verwenden
                if (regSchluessel == null)
                {
                    return;
                }

                // Lese Werte aus Registry
                var val = regSchluessel.GetValue("Breite");
                if (val != null)
                {
                    this.Width = (int)val;
                }
                val = regSchluessel.GetValue("Hoehe");
                if (val != null)
                {
                    this.Height = (int)val;
                }
                val = regSchluessel.GetValue("Schwierigkeit");
                if (val != null)
                {
                    this.schwierigkeit = (int)val;
                }
            }
        }

Nun schreibe ich die Einstellungen bevor die Anwendung beendet wird und lese sie nach InitializeComponent(); aus.

Was aber nicht funktioniert, es werden nach Neustart wieder die Standardwerte übergeben. In der Registrierung selbst ändert sich nichts.

Was mache ich falsch?

Danke

Thema: Registry - Windows Forms
Am im Forum: Rund um die Programmierung

Ich hab´s jetzt!

Es gab im Aufgabentext eine fehlerhafte Formulierung.
Außerdem wusste ich nicht genau was mit den Werten gemeint war.

Danke, danke ihr habt mir sehr geholfen.

Thema: Registry - Windows Forms
Am im Forum: Rund um die Programmierung

Vielen Dank,

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"."

Hab ich nicht genau das gemacht?


private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox3.Items.Clear();
            string Schluessel = listBox1.SelectedItem.ToString() + "\\" + listBox2.SelectedItem.ToString();
            regSchluessel = Registry.CurrentUser.OpenSubKey(Schluessel);
            if (regSchluessel == null)
            {
                MessageBox.Show("Keine weiteren Schlüssel");
            }
            else
            {
               regEintragListe = regSchluessel.GetValueNames();
                foreach (string eintrag in regEintragListe)
                    if (regEintragListe == null)
                    {
                        MessageBox.Show("Keine weiteren Schlüssel");
                    }
                    else
                listBox3.Items.Add(eintrag + " = " + Convert.ToString(regSchluessel.GetValueKind(eintrag)));
            }
        }

Sorry, aber irgendwas verstehe ich nicht.

In Feld 3 werden aktuell nur die direkten SubKeys angezeigt und nicht alles.

Thema: Registry - Windows Forms
Am im Forum: Rund um die Programmierung

Hallo nochmal.


 string Schluessel = listBox1.SelectedItem.ToString() + "\\" + listBox2.SelectedItem.ToString();
            regSchluessel = Registry.CurrentUser.OpenSubKey(Schluessel);

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?

Ich weiß nicht weiter.


vollständige Methode:


 private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox3.Items.Clear();
            string Schluessel = listBox1.SelectedItem.ToString() + "\\" + listBox2.SelectedItem.ToString();
            regSchluessel = Registry.CurrentUser.OpenSubKey(Schluessel);
            if (regSchluessel == null)
            {
                MessageBox.Show("Keine weiteren Schlüssel");
            }
            else
            {
                regEintragListe = regSchluessel.GetValueNames();
                foreach (string eintrag in regEintragListe)
                    if (regEintragListe == null)
                    {
                        MessageBox.Show("Keine weiteren Schlüssel");
                    }
                    else

                        listBox3.Items.Add(eintrag + " = " + Convert.ToString(regSchluessel.GetValueKind(eintrag)));
            }
        }


Danke, bin am Verzweifeln

Thema: Registry - Windows Forms
Am im Forum: Rund um die Programmierung

Vielen Dank!
Das hat mir schon sehr weiter geholfen. Aktuell hakt es hier und da noch.

Eventuell melde ich mich unter diesem Thema nochmal...

Thema: Registry - Windows Forms
Am im Forum: Rund um die Programmierung

Hallo!

Kann mir jemand helfen?


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.

Danke

Thema: Windows Forms - Radiobuttons
Am im Forum: Grundlagen von C#

Vielen Dank

Thema: Windows Forms - Radiobuttons
Am im Forum: Grundlagen von C#

Hallo,

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.


Kennt sich jemand damit aus?
Gruß