Hallo allerseits
Durch einen OP Eingriff meiner Hand konnt ich die pdf´s wieder in Ruhe durchlesen.
Inzwischen sind mir die Begriffe Klasse,Function,Delegate (Fast) und Co. schon sehr vertraut.
Meine erste Klasse habe ich mal erstellt und es kappt wohl alles:
Zur Info:
Der zustand meines Hauses wird in Varablen gespeichert.
Mein erster gedanke war:
Dim g1/0/0 as Integer = 1
Dim g1/0/1 as Integer = 0
...
Dim g7/15/15 as integer = 0
habe ich schnell fallen gelassen. Müßte 2000 - 6000 Dim Befehle tippen
Da ich nun endlich mehr von den Klassen verstehe habe ich dies nun so realisiert:
Füllen einer Array-Klasse über eine Datenbank (kommt noch. Nicht so schwer)
Zugriffe auf die "Variablen" über die Klasse.
Das sieht so aus:
Public Class Form1
Inherits System.Windows.Forms.Form
Public eib As New eib
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
eib.lesen()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
MessageBox.Show(eib.gaget(txtsuch.Text))
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button2.Click
eib.gawrite(txtsuch.Text, txtwert.Text)
End Sub
Private Sub txtset_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles txtset.Click
eib.gaset(txtsuch.Text, txtwert.Text)
End Sub
End Class Public Class eib
Public GA(2000) As String
Public Wert(2000) As String
Public Typ(2000) As String
Public Info(2000) As String
Public Time(2000) As Date
Function lesen()
Dim i As Integer
For i = 0 To 2000
GA(i) = "Gruppe" & i.ToString
Info(i) = "Info" & i.ToString
Wert(i) = i.ToString
Typ(i) = "Typ:" & i.ToString
Time(i) = Date.Now
Next
End Function
Function gaget(ByVal such As String) As String
Dim i As Integer
For i = 0 To GA.GetUpperBound(0)
If GA(i) = such Then
Return Wert(i)
End If
Next
End Function
Function gawrite(ByVal such As String, ByVal wert As String)
Dim i As Integer
For i = 0 To GA.GetUpperBound(0)
If GA(i) = such Then
MessageBox.Show("Unter der Gruppadresse " & such & " wird der" & _
"Wert " & Me.Wert(i) & " auf den Bus gesendet")
End If
Next
End Function
Function gaset(ByVal such As String, ByVal wert As String)
Dim i As Integer
For i = 0 To GA.GetUpperBound(0)
If GA(i) = such Then
Me.Wert(i) = wert
End If
Next
End Function
End Class Das ganze wird zum Testen über eine Schleife gefüllt (2000 Zustände)
Will man den Zustand von Gruppe345 wissen:
i = eib.gaget("Gruppe345") In der Function gaget wird der String übertragen und im array nach der Gruppe gesucht. Wenn gefunden, Rückgabe des wertes.
Klappt auch so.
Aber ich habe ein paar Fragen:
Der Grund, das alle als String dimensioniert sind, ist der, das jede Gruppe unterschiedliche Formate hat (Integer, Short,...) und leider auch Texte.
Da ich nicht Array(345) als Integer und Array(346) als String Dim. kann, habe ich generell String genommen.
Aber nun muss ich, wenn etwas berechnet wird, immer zuerst prüfen ob es ein text, oder eine Zahl ist.
Kann man das irgendwie umgehen? Texte in den 2000 - 6000 großen Array, sind zwar sehr rahr, aber dennoch vorhanden.
Würde ich als Double eine Wert dim, und es wird dann aus der DB ein Text eingelesen, gibts Probleme.
Ich weiß auch, das ich über Overload mehrere gleiche Functionen erstellen kann.
Es wird dann automatisch der Richtige genommen, der für den Aufruf paßt.
Aber ist dies wirklich so einfach,bzw. Ich muss ja erstmal alles Dim.
Oder soll ich die DB so einlesen, das zuerst alle Integer, dann alle Short und dann alle texte eingelesen wird?
Über Typ() sind die Werte als Klartext (Integer,Short,String) gezeichnet. So könnt ich jeden Wert den genauen Typ zuweisen.
Kann jemand etwas Hilfe anbieten.
Auch habe ich über Eigenschaft und Parameter gelessen. jedoch habe ich noch kein genaues Bild davon, wie ich dies einsetzen könnte.
Oder bleibt mir nichts erspart, als für jeden Typ das ganze zu tippen?
Vielen Dank
Hannes |