C# KeyApp

  • Ersteller Ersteller Slim.
  • Erstellt am Erstellt am
S

Slim.

Gast
Ich grüße euch. ✌

Hoffe ich bin hier richtig, ansonsten bitte verschieben.

Bin kein C# Meister aber ich habe mir aus Langeweile ein kleines Tool gemacht da ich Keys von Programmen, Games etc. immer im Textdokument speichere und es gerne ordentlich hätte. (Excel geht auch, aber wäre ja langweilig :D).

Vielleicht findet es jemand für sich selbst nützlich und freut sich darüber. :)

Verbesserungsvorschläge nehme ich gerne entgegen.

780966

Viele Grüße
 

Anhänge

  • Gefällt mir
Reaktionen: Vollkorn und piepenkorn
"alphabetisch sortieren" wäre nett um später den Überblick zu behalten
 
  • Gefällt mir
Reaktionen: Slim.
Poste den Quellcode, wildfremde .exe tu ich mir nicht an.
 
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;

namespace KeyApp
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void frmMain_Load(object sender, EventArgs e)
        {

            try
            {
                // Xml Datei wird geladen..

                string path = @"Datenbank.xml";

                foreach (var node in XDocument.Load(path).Root.Elements("Item"))
                {
                    // Die ListView wird zugewiesen / Einträge werden hinzugefügt..
                    var lvi = new ListViewItem(node.Attribute("Name").Value);
                    lvi.SubItems.Add(node.Attribute("Key").Value);
                    lvi.SubItems.Add(node.Attribute("Art").Value);
                    listView1.Items.Add(lvi);
                }
            }
            catch
            {
                // Wenn keine Datenbank vorhanden war, erscheint eine Fehlermeldung..
                MessageBox.Show("Die Datenbank konnte nicht geladen werden.\nEs wird jetzt eine neue Datenbank erstellt.");

                // Datei wird erstellt..
                string path2 = @"Datenbank.xml";

                var doc = new XDocument(new XElement("Datenbank"));
                foreach (var item in listView1.Items.OfType<ListViewItem>())
                {
                    var el = new XElement("Item");
                    el.SetAttributeValue("Name", item.SubItems[0].Text);
                    el.SetAttributeValue("Key", item.SubItems[1].Text);
                    el.SetAttributeValue("Art", item.SubItems[2].Text);
                    doc.Root.Add(el);
                }

                doc.Save(path2);

            }

            string benutzername = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
            this.stBenutzer.Text = "Benutzer: " + benutzername;

            string items = listView1.Items.Count.ToString();
            this.stEinträge.Text = "Einträge: " + items;
        }

        private void tsNeuerEintrag_Click(object sender, EventArgs e)
        {
            frmAdd add = new frmAdd();
            add.ShowDialog();

            if (add.DialogResult == DialogResult.OK)
            {
                if (add.txtKey.TextLength == 0 || add.txtName.TextLength == 0)
                {
                    MessageBox.Show("Eintrag ungültig.");
                }
                else
                {
                    string name = add.txtName.Text;
                    string key = add.txtKey.Text;
                    string art = add.cbArt.Text.ToString();

                    ListViewItem item = listView1.Items.Add(name);
                    item.SubItems.Add(key);
                    item.SubItems.Add(art);

                }

            }

            string items = listView1.Items.Count.ToString();
            this.stEinträge.Text = "Einträge: " + items;

        }

        private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
        {
            //Speichern

            string path = @"Datenbank.xml";

            var doc = new XDocument(new XElement("Datenbank"));
            foreach (var item in listView1.Items.OfType<ListViewItem>())
            {
                var el = new XElement("Item");
                el.SetAttributeValue("Name", item.SubItems[0].Text);
                el.SetAttributeValue("Key", item.SubItems[1].Text);
                el.SetAttributeValue("Art", item.SubItems[2].Text);
                doc.Root.Add(el);
            }
            doc.Save(path);

        }

        private void tsZwischenablage_Click(object sender, EventArgs e)
        {
            try
            {
                string copy = this.listView1.SelectedItems[0].SubItems[1].Text;
                Clipboard.SetText(copy);
            }
            catch
            {
                MessageBox.Show("Es wurde kein Eintrag ausgewählt.");
            }
        }

        private void tsaLöschen_Click(object sender, EventArgs e)
        {
            try
            {
                listView1.SelectedItems[0].Remove();
            }
            catch
            {
                MessageBox.Show("Es wurde kein Eintrag zum Löschen ausgewählt.");
            }

            string items = listView1.Items.Count.ToString();
            this.stEinträge.Text = "Einträge: " + items;
        }

        private void alleEinträgeLöschenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Sollen wirklich ALLE Einträge gelöscht werden?", "Achtung!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                try
                {
                    listView1.Items.Clear();
                }
                catch
                {
                    MessageBox.Show("Es sind keine Einträge zum Löschen vorhanden.");
                }
            }
            else if (result == DialogResult.No)
            {
                //nichts passiert.
            }

            string items = listView1.Items.Count.ToString();
            this.stEinträge.Text = "Einträge: " + items;
        }

        private void tsBearbeiten_Click(object sender, EventArgs e)
        {
            try
            {
                frmAdd edit = new frmAdd();

                string name = this.listView1.SelectedItems[0].Text;
                string key = this.listView1.SelectedItems[0].SubItems[1].Text;
                string art = this.listView1.SelectedItems[0].SubItems[2].Text;

                edit.txtName.Text = name;
                edit.txtKey.Text = key;
                edit.cbArt.Text = art;

                edit.ShowDialog();

                if (edit.DialogResult == DialogResult.OK)
                {
                    this.listView1.SelectedItems[0].Remove();

                    if (edit.txtKey.TextLength == 0 || edit.txtName.TextLength == 0)
                    {
                        MessageBox.Show("Eintrag ungültig.");
                    }
                    else
                    {
                        string namenew = edit.txtName.Text;
                        string keynew = edit.txtKey.Text;
                        string artnew = edit.cbArt.Text.ToString();

                        ListViewItem item = listView1.Items.Add(namenew);
                        item.SubItems.Add(keynew);
                        item.SubItems.Add(artnew);
                    }
                }
            }
            catch
            {
                MessageBox.Show("Es wurde kein Eintrag ausgewählt.");
            }

            string items = listView1.Items.Count.ToString();
            this.stEinträge.Text = "Einträge: " + items;
        }

        private void tsshowkey_Click(object sender, EventArgs e)
        {
            try
            {
                frmShowKey showkey = new frmShowKey();

                string key = this.listView1.Items[0].SubItems[1].Text;
                showkey.txtKey.Text = key;

                showkey.Show();
            }
            catch
            {
                MessageBox.Show("Es wurde kein Eintrag ausgewählt.");
            }
        }

        private void tsInfo_Click(object sender, EventArgs e)
        {
            frmInfo info = new frmInfo();
            info.ShowDialog();
        }
    }
}

Ist noch nicht schön, ich weis! Kommt noch.
 
Das ist jetzt nicht direkt Feedback zur Anwendung, aber ich würde dir WPF und Model-View-ViewModel (MVVM) nahelegen.

Klassen und Methoden in C# sind PascalCase. Ich weiß das macht der Editor selber so blöd bei WinForms.
 
Nilson schrieb:
Poste den Quellcode, wildfremde .exe tu ich mir nicht an.

komm schon "nicht so schüchtern" es ist Wochenende, da kann man auch ein bischen verrückt sein und wild drauf losklicken
 
  • Gefällt mir
Reaktionen: piepenkorn und Slim.
Sub Items, um z.B. Keys von Addons zu verwalten.

Executable für Linux und macOS ;)
 
  • Gefällt mir
Reaktionen: Slim.
Shadow127 schrieb:
Das ist jetzt nicht direkt Feedback zur Anwendung, aber ich würde dir WPF und Model-View-ViewModel (MVVM) nahelegen.

Klassen und Methoden in C# sind PascalCase. Ich weiß das macht der Editor selber so blöd bei WinForms.

Kann ich tatsächlich leider garnicht's mit anfangen. Wie gesagt, bin nicht so der Held beim Programmieren. Hab schon einige Jahre nicht's mehr gemacht.
 
WPF (Windows Presentation Foundation) ist eine Alternative für Windows Forms, meiner Meinung nach moderner und angenehmer zu verwenden.
MVVM ist eine Architektur in der ein View mittels eines ViewModels mit Daten versorgt wird und alle Interaktionen mit der Business Logik abhandelt.
Ist in deinem Fall jetzt nicht sonderlich wichtig, aber macht das Leben in größeren Anwendungen leichter.

EDIT: Was mir da noch als Vorteil von WPF einfällt ist DataBinding, man muss nicht direkt auf z.B. TextFelder zugreifen um den Text zu ändern, man bindet eine Variable an das Feld und beim ändern der Variable wird der Text automatisch aktualisiert. Das ganze funktioniert in beide Richtungen, also Änderungen im UI werden auf die Variable übertragen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Slim.
Vollkorn schrieb:
komm schon "nicht so schüchtern" es ist Wochenende, da kann man auch ein bischen verrückt sein und wild drauf losklicken

Hab gar nicht dran gedacht den Code zu posten weil ich die Menschen nicht verstehe die mit ihren Programmen Unfug treiben. Was hat man davon?
 
Shadow127 schrieb:
Das ist jetzt nicht direkt Feedback zur Anwendung, aber ich würde dir WPF und Model-View-ViewModel (MVVM) nahelegen.
Prinzipiell gebe ich dir Recht, aber bei einem Programm mit knapp 200 Codezeilen sind Design Pattern wie MVVM immer so eine Sache. Am Ende hat man durch das Pattern mehr Zeilen an Overhead als das eigentliche Programm ;)

WPF würde ich hingegen auch empfehlen, zumindest für das nächste Projekt, weil Windows Forms nu schon reichlich Rost angesetzt haben.. Allerdings ist das für kleine just4fun-Projekte auch eher sekundär.
 
  • Gefällt mir
Reaktionen: new Account()
Zurück
Oben