Hallo,
Ich hab mir zur Übung ein kleines Programm geschrieben. Einen Teil des Programms hab ich durch ein Event gelöst und wollte Fragen ob das eine gute Lösung ist oder nicht. Ich versuche das zu beschreiben. In der Klasse Main wird beim laden der Form,
auf die Methode ReadButtons der Klasse oSave zugegriffen und in einer Schleife jedesmal ein Event ausgelöst der mir zwei Strings an die Methode CreateButton liefert.
Ich könnte auch bei der ReadButtons Methode ein Array(das Event löschen) mit Strings zurückgeben lassen, und das an CreateButton übergeben, da ich aber auch zur Laufzeit die CreateButton Methode benötige, wo dann nur zwei Strings übergeben werden dachte ich das ist mit einem Event die bessere Lösung. Bei solchen Sachen tue ich mich noch schwer, es gibt mehrere Möglichkeiten z. B. wäre es auch möglich das ich in der ReadButtons einen Aufruf Main.CreateButton(String, String) erstelle, mit dieser Lösung ist aber die Methode der Klasse XMLSave nur brauchbar wenn es eine Klasse Main gibt, das würde die wieder verwenden der Klasse zerstören. Ich möchte dafür eine saubere Lösung finden um mich auch in Zukunft daran halten zu können.
Ich würde ja gerne die ganze Anwendung hochladen, aber das Ganze überschreitet die 5kb Grenze.
Da ich Anfänger bin, wär ich über Kritik, Verbesserungen usw. sehr erfreut.
Public Class Main
Private oSave As New XMLSave
Private Sub Main_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
'3.Event anmelden, und Sub aufrufen
AddHandler oSave.ReadButtons, AddressOf CreateButton
oSave.ReadXML()
End Sub
Private Sub CreateButton(ByVal txtButtonName As String, ByVal txtLoc As String)
Dim mButton As New Button
With mButton
.Text = txtButtonName
.Name = txtLoc
.Size = New Size(141, 28)
.Font = New Font("Microsoft Sans Serif", 10)
.BackColor = Color.AliceBlue
.Location = New Point(12, mPosition)
.FlatStyle = FlatStyle.Flat
.Parent = Me
AddHandler .Click, AddressOf ButtonClick
End With
mPosition += 32
Me.Size = New Size(175, mPosition + 32)
End Sub
End Class
Public Class XMLSave
Private doc As New XmlDocument()
Private node As XmlNode
Private element As XmlElement
Private subnode As XmlNode
'1. Neues Event
Event ReadButtons(ByVal txtButtonName As String, ByVal txtLoc As String)
Public Sub ReadXML()
Try
doc.Load("tasks.xml")
Dim txtButtonName As String = "none"
Dim txtLoc As String = "none"
For Each Me.node In doc.DocumentElement
For Each Me.subnode In node.ChildNodes
Select Case subnode.Name
Case "name"
txtButtonName = subnode.InnerText
Case "location"
txtLoc = subnode.InnerText
End Select
Next
'2. Event auslösen
RaiseEvent ReadButtons(txtButtonName, txtLoc)
Next
doc.Save("tasks.xml")
Catch ex As Exception
CreateXml()
End Try
End Sub
End Class |