Moin moin
Ich habe ein weiteres Projekt zur Übung von verschiedenen Sachen begonnen.
Ein kleines Programm um Dateien um zu benennen. Ich habe das aus mehreren Gründen gemacht.
1.) Was ich im www fand war alles nicht so richtig zu gebrauchen
2.) Weil mein Opa auch eins brauchte
3.) Um noch weiter zu Üben auch was das Kommentieren von Code betrifft.
Bisher funktioniert alles so wie ich es mir vorstellte. Hier mal ein Teil des Programmes:
Erweiterungen in der XML Hinzufügen und das MainForm aktualisieren.
Es gibt bestimmt noch viel was zu ändern wäre, ich habe mich auch bemüht alles OOP-Konform zu machen.
Spoiler anzeigen
Ich habe ein weiteres Projekt zur Übung von verschiedenen Sachen begonnen.
Ein kleines Programm um Dateien um zu benennen. Ich habe das aus mehreren Gründen gemacht.
1.) Was ich im www fand war alles nicht so richtig zu gebrauchen
2.) Weil mein Opa auch eins brauchte

3.) Um noch weiter zu Üben auch was das Kommentieren von Code betrifft.
Bisher funktioniert alles so wie ich es mir vorstellte. Hier mal ein Teil des Programmes:
Erweiterungen in der XML Hinzufügen und das MainForm aktualisieren.
Es gibt bestimmt noch viel was zu ändern wäre, ich habe mich auch bemüht alles OOP-Konform zu machen.

Das Form
Klasse zum speichern / ergänzen des XML-Files
Klasse zum erstellen des XML-Files
Das Form
VB.NET-Quellcode
-
- Public Class frm_Extensions
- Private Property XML_Path As String = Path.Combine(Application.StartupPath, "Extensions.xml")
- Private WithEvents CreateXMLFile As New CreateXMLFile
- Private WithEvents SaveXMLFile As New SaveXMLFile
- ''' <summary>
- ''' Konstruktor der Klasse frm_Extensions.
- ''' </summary>
- Public Sub New()
- InitializeComponent()
- If Not File.Exists(XML_Path) Then
- CreateXMLFile.CheckAndCreateXMLFile(XML_Path)
- MessageBox.Show("Keine XML-Datei gefunden, es wurde eine neue erstellt.", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Information)
- End If
- LoadFromXMLFile(XML_Path)
- LoadGroupNamesFromXML(XML_Path)
- LoadFromXMLFile(XML_Path)
- LoadGroupNamesFromXML(XML_Path)
- End Sub
- ''' <summary>
- ''' Meldungs und Fehlerbahandlung der SpeichernKlasse,
- ''' sowie EvendHandels für die Speicherung der XML-Datei.
- ''' </summary>
- Private Sub CreateXML_Error(ByVal errorMessage As String) Handles CreateXMLFile.ErrorOccurred
- ' Ausgaben wenn Fehler
- MessageBox.Show(errorMessage, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End Sub
- ' Ausgaben wenn ok
- Public Sub CreateXML_XMLFileCreated() Handles CreateXMLFile.XMLFileCreated
- MessageBox.Show("Keine XML-Datei gefunden, es wurde eine neue erstellt.", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Information)
- End Sub
- ''' <summary>
- ''' Übergabe der Variablen an die SpeichernKlasse,
- ''' sowie EvendHandels für die Speicherung der XML-Datei.
- ''' </summary>
- Private Sub btn_Save_Click(sender As Object, e As EventArgs) Handles btn_Save.Click
- Dim groupName As String = txt_Group.Text.Trim()
- Dim extensions As String = txt_Extension.Text.Trim()
- SaveXMLFile.SaveDataToFile(XML_Path, groupName, extensions)
- End Sub
- ' Aktionen ausführen, wenn die Daten erfolgreich gespeichert wurden
- Private Sub DataSavedSuccessfullyHandler(sender As Object, e As EventArgs) Handles SaveXMLFile.DataSavedSuccessfully
- ' Listboxen aktualisieren
- LoadFromXMLFile(XML_Path)
- LoadGroupNamesFromXML(XML_Path)
- ' Textboxen leeren
- txt_Group.Text = String.Empty
- txt_Extension.Text = String.Empty
- MessageBox.Show("Die Daten wurden erfolgreich gespeichert.", "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information)
- End Sub
- Private Sub SaveDataErrorHandler(sender As Object, e As SaveDataErrorEventArgs) Handles SaveXMLFile.SaveDataErrorOccurred
- ' Aktionen ausführen, wenn ein Fehler beim Speichern der Daten aufgetreten ist
- MessageBox.Show(e.ErrorMessage, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
- ' Optional: Weitere Informationen zur Fehlerbehandlung anzeigen
- If e.Exception IsNot Nothing Then
- MessageBox.Show("Fehlerdetails: " & e.Exception.Message, "Fehlerdetails", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End If
- End Sub
- ''' <summary>
- ''' Lädt die Gruppen und Erweiterungen aus der XML-Datei
- ''' und fügt sie der ListView hinzu.
- ''' </summary>
- Private Sub LoadFromXMLFile(filePath As String)
- Try
- Dim xdoc As XDocument = XDocument.Load(filePath)
- ListView1.Items.Clear()
- For Each groupElement As XElement In xdoc.Descendants("Group")
- Dim groupName As String = groupElement.Attribute("Name").Value
- Dim groupHeader As New ListViewGroup(groupName)
- ListView1.Groups.Add(groupHeader)
- For Each extensionElement As XElement In groupElement.Descendants("Extension")
- Dim extension As String = extensionElement.Value
- Dim item As New ListViewItem(extension)
- item.Group = groupHeader
- ListView1.Items.Add(item)
- Next
- Next
- Catch ex As Exception
- MessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End Try
- End Sub
- ''' <summary>
- ''' Event-Handler für das SelectedIndexChanged-Ereignis der CheckedListBox.
- ''' Füllt das Gruppenname-Textfeld mit dem ausgewählten Gruppennamen.
- ''' </summary>
- Private Sub ListBox_Group_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox_Group.SelectedIndexChanged
- ' Überprüfen, ob ein Gruppenname ausgewählt wurde
- If ListBox_Group.SelectedIndex >= 0 Then
- ' Den ausgewählten Gruppennamen in die Textbox der Gruppe eintragen
- txt_Group.Text = ListBox_Group.SelectedItem.ToString()
- End If
- End Sub
- ''' <summary>
- ''' Lädt die Gruppennamen aus der XML-Datei in die CheckedListBox.
- ''' </summary>
- Private Sub LoadGroupNamesFromXML(filePath As String)
- ListBox_Group.Items.Clear()
- Try
- Dim settings As New XmlReaderSettings()
- ' Leerzeichen ignorieren
- settings.IgnoreWhitespace = True
- Using reader As XmlReader = XmlReader.Create(filePath, settings)
- Dim xdoc As XDocument = XDocument.Load(reader)
- ' Durchsuchen der XML und Extrahieren der Gruppennamen
- For Each groupElement As XElement In xdoc.Descendants("Group")
- Dim groupName As String = groupElement.Attribute("Name").Value
- ListBox_Group.Items.Add(groupName)
- Next
- End Using
- Catch ex As Exception
- MessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End Try
- End Sub
- End Class
Klasse zum speichern / ergänzen des XML-Files
VB.NET-Quellcode
-
- Public Class SaveXMLFile
- ''' <summary>
- ''' Event, das ausgelöst wird, wenn die Daten erfolgreich gespeichert wurden.
- ''' </summary>
- Public Shared Event DataSavedSuccessfully As EventHandler
- ''' <summary>
- ''' Event, das ausgelöst wird, wenn ein Fehler beim Speichern der Daten auftritt.
- ''' </summary>
- Public Shared Event SaveDataErrorOccurred As EventHandler(Of SaveDataErrorEventArgs)
- ''' <summary>
- ''' Speichert die eingegebenen Erweiterungen in der XML-Datei.
- ''' </summary>
- Public Shared Sub SaveDataToFile(filePath As String, groupName As String, extensions As String)
- ' Überprüfen, ob sowohl Gruppenname als auch Erweiterungen eingegeben wurden
- If String.IsNullOrEmpty(groupName) OrElse String.IsNullOrEmpty(extensions) Then
- RaiseEvent SaveDataErrorOccurred(Nothing, New SaveDataErrorEventArgs("Bitte geben Sie einen Gruppennamen und Erweiterungen ein."))
- Return
- End If
- ' Aufteilen der eingegebenen Erweiterungen anhand des Kommas
- Dim extensionList As List(Of String) = extensions.Split(","c).Select(Function(ext) ext.Trim()).ToList()
- ' Überprüfen, ob mehr als 5 Erweiterungen eingegeben wurden
- If extensionList.Count > 5 Then
- RaiseEvent SaveDataErrorOccurred(Nothing, New SaveDataErrorEventArgs("Es können maximal 5 Erweiterungen pro Speichervorgang eingegeben werden."))
- Return
- End If
- Try
- ' Laden der vorhandenen XML-Datei
- Dim xdoc As XDocument = XDocument.Load(filePath)
- ' Überprüfen, ob die Gruppe bereits existiert
- Dim existingGroup As XElement = xdoc.Descendants("Group").FirstOrDefault(Function(g) g.Attribute("Name").Value = groupName)
- If existingGroup IsNot Nothing Then
- ' Gruppe existiert bereits, Erweiterungen hinzufügen
- Dim extensionsElement As XElement = existingGroup.Element("Extensions")
- ' Hinzufügen der neuen Erweiterungen zur Gruppe
- extensionList.ForEach(Sub(extension) extensionsElement.Add(New XElement("Extension", extension)))
- Else
- ' Gruppe existiert noch nicht, neue Gruppe mit Erweiterungen hinzufügen
- Dim fileExtensionGroupsElement As XElement = xdoc.Descendants("FileExtensionGroups").FirstOrDefault()
- Dim newGroupElement As New XElement("Group", New XAttribute("Name", groupName))
- Dim extensionsElement As New XElement("Extensions")
- extensionList.ForEach(Sub(extension) extensionsElement.Add(New XElement("Extension", extension)))
- newGroupElement.Add(extensionsElement)
- fileExtensionGroupsElement.Add(newGroupElement)
- End If
- ' Speichern der aktualisierten XML-Datei
- xdoc.Save(filePath)
- ' Daten erfolgreich gespeichert
- RaiseEvent DataSavedSuccessfully(Nothing, EventArgs.Empty)
- Catch ex As Exception
- RaiseEvent SaveDataErrorOccurred(Nothing, New SaveDataErrorEventArgs("Beim Speichern der Daten ist ein Fehler aufgetreten.", ex))
- End Try
- End Sub
- End Class
- ''' <summary>
- ''' Stellt ein Ereignisargument dar, das Informationen über einen Fehler beim Speichern von Daten enthält.
- ''' </summary>
- Public Class SaveDataErrorEventArgs
- Inherits EventArgs
- ''' <summary>
- ''' Initialisiert eine neue Instanz der SaveDataErrorEventArgs-Klasse mit der angegebenen Fehlermeldung.
- ''' </summary>
- ''' <param name="errorMessage">Die Fehlermeldung.</param>
- Public Sub New(errorMessage As String)
- Me.New(errorMessage, Nothing)
- End Sub
- ''' <summary>
- ''' Initialisiert eine neue Instanz der SaveDataErrorEventArgs-Klasse mit der angegebenen Fehlermeldung und Ausnahme.
- ''' </summary>
- ''' <param name="errorMessage">Die Fehlermeldung.</param>
- ''' <param name="exception">Die Ausnahme, die den Fehler verursacht hat.</param>
- Public Sub New(errorMessage As String, exception As Exception)
- Me._ErrorMessage = errorMessage
- Me._Exception = exception
- End Sub
- Private _ErrorMessage As String
- ''' <summary>
- ''' Ruft die Fehlermeldung ab.
- ''' </summary>
- Public ReadOnly Property ErrorMessage As String
- Get
- Return _ErrorMessage
- End Get
- End Property
- Private _Exception As Exception
- ''' <summary>
- ''' Ruft die Ausnahme ab, die den Fehler verursacht hat.
- ''' </summary>
- Public ReadOnly Property Exception As Exception
- Get
- Return _Exception
- End Get
- End Property
- End Class
Klasse zum erstellen des XML-Files
VB.NET-Quellcode
-
- Public Class CreateXMLFile
- ' Ereignis, das auftritt, wenn ein Fehler auftritt
- Public Shared Event ErrorOccurred(ByVal errorMessage As String)
- Public Shared Event XMLFileCreated()
- ''' <summary>
- ''' Überprüft, ob die XML-Datei vorhanden ist, und erstellt sie falls nicht.
- ''' </summary>
- Public Shared Sub CheckAndCreateXMLFile(filePath As String)
- ' Überprüfen, ob die XML-Datei vorhanden ist
- If File.Exists(filePath) Then Return
- Try
- ' XML-Struktur erstellen
- Dim xdoc As XDocument = CreateInitialXMLStructure()
- xdoc.Save(filePath)
- ' Event auslösen, um anzuzeigen, dass die XML-Datei erstellt wurde
- RaiseEvent XMLFileCreated()
- Catch ex As Exception
- ' Event auslösen, um den Fehler beim Erstellen der XML-Datei zu melden
- RaiseEvent ErrorOccurred(ex.Message)
- End Try
- End Sub
- ''' <summary>
- ''' Erstellt die initiale XML-Struktur mit den vordefinierten Gruppen und Erweiterungen.
- ''' </summary>
- Private Shared Function CreateInitialXMLStructure() As XDocument
- ' Liste der Gruppen und zugehörigen Erweiterungen erstellen
- Dim groups As New List(Of GroupElement) From {
- New GroupElement("Bildertypen", New List(Of String) From {".jpg", ".jpeg", ".png"}),
- New GroupElement("Texttypen", New List(Of String) From {".txt", ".doc", ".pdf"})
- }
- Dim fileExtensionGroupsElement As New XElement("FileExtensionGroups")
- For Each group In groups
- fileExtensionGroupsElement.Add(group.ToXElement())
- Next
- ' XML-Dokument erstellen und zurückgeben
- Return New XDocument(
- New XElement("FileExtensionDictionary",
- fileExtensionGroupsElement
- )
- )
- End Function
- ''' <summary>
- ''' Stellt eine Gruppe mit dem Gruppennamen und den zugehörigen Erweiterungen dar.
- ''' </summary>
- Private Class GroupElement
- Public Sub New(name As String, extensions As List(Of String))
- Me.Name = name
- Me.Extensions = extensions
- End Sub
- Public Property Name As String
- Public Property Extensions As List(Of String)
- ''' <summary>
- ''' Konvertiert das GroupElement-Objekt in ein XElement-Objekt für die XML-Darstellung.
- ''' </summary>
- ''' <returns>Das XElement-Objekt, das die Gruppe repräsentiert.</returns>
- Public Function ToXElement() As XElement
- Dim groupElement As New XElement("Group", New XAttribute("Name", Name))
- Dim extensionsElement As New XElement("Extensions")
- For Each extension In Extensions
- extensionsElement.Add(New XElement("Extension", extension))
- Next
- groupElement.Add(extensionsElement)
- Return groupElement
- End Function
- End Class
- End Class
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. 
