| |
VB.NET - Ein- und UmsteigerRe: In Klasse Stucture und Enum verwenden | | | Autor: Bibobernie | Datum: 31.08.12 15:14 |
| Najas, habs geschachtelt genannt weils im Klassendiagramm unter geschachtelte Typen geführt wird;). Wie man es nun auch bezeichnet, wirklich weiter bin ich noch nicht damit gekommen. Hier erstmal der Code. Im Grunde der gleiche wie oben nur die beiden Fetten worte haben sich geändert:
Public Class MessGerät
Public Enum Führungsgröße
Aus
Zellspannung
Elektrolysestrom
Sauerstoffkonzentration
End Enum
Private _Uart As SerialPort
Private _Fuehrung As Integer
''' <summary>
''' Gibt die Com-Schnittstelle der Messzelle über die kommuniziert wird
' zurück
''' </summary>
''' <value></value>
''' <returns>Schnittstelle als Seriellen Port</returns>
''' <remarks></remarks>
Public Property MYPort As SerialPort
Get
Return _Uart
End Get
Set(ByVal value As SerialPort)
_Uart = value
End Set
End Property
Public Sub New(ByVal Schnittstelle As SerialPort)
_Uart = Schnittstelle
End Sub
Public Class Messwerterfassung
Public shared Function SetzeFührung(ByVal Führung as _
Führungsgröße) As integer
With MYPort
Try
.Write("Befehl1" & vbCr)
Dim Antwort As String = .ReadTo(ChrW(13))
If Antwort.Contains("!") Then
Antwort = Antwort.Remove(0, 3)
_Führung = Cint(Antwort)
Return cint(Antwort)
Else
Return -9999
End If
Catch ex As TimeoutException
Throw New ApplicationException(ex.Message, _
ex.InnerException)
Catch ex As Exception
Throw New ApplicationException(ex.Message, _
ex.InnerException)
End Try
End With
End Function
'Funktion 2, 3 usw
End structure
Public Structure Parameter
'Funktion 1, 2 usw
End Structure
End Class Damit kann ich zumindest schonmal einen aufruf ala MessGerät.Messwerterfassung.SetzeFührung durchführen. Allerdings würde ich in der Methode SetzeFührung noch den Seriellen Port benötigen damit die Befehle dann an das Gerät geschickt werden können. Eventuell den ich aber auch zu kompliziert und ein anderer Ansatz wäre einfacher...?
Ahnungsloser ahnungsloser... | |
In Klasse Stucture und Enum verwenden | | | Autor: Bibobernie | Datum: 31.08.12 08:55 |
| Nach längerer Pause kann ich mich nun endlich wieder ein wenig der Programmierung widmen und stoße sogleich auf zwei kleinere problemchen. Zum einen würde ich sehr gern Strukturen für zusammengehörende Befehle in meiner Klasse verwenden. Zum anderen würde ich gern zulässige Eingaben bei Funktionen mittels Enum vorgeben. Hier mal ein Beispiel:
Public Class MessGerät
Public Enum Führungsgröße
Aus
Zellspannung
Elektrolysestrom
Sauerstoffkonzentration
End Enum
Private _Uart As SerialPort
Private _Fuehrung As Integer
''' <summary>
''' Gibt die Com-Schnittstelle der Messzelle über die kommuniziert wird
' zurück
''' </summary>
''' <value></value>
''' <returns>Schnittstelle als Seriellen Port</returns>
''' <remarks></remarks>
Public Property MYPort As SerialPort
Get
Return _Uart
End Get
Set(ByVal value As SerialPort)
_Uart = value
End Set
End Property
Public Sub New(ByVal Schnittstelle As SerialPort)
_Uart = Schnittstelle
End Sub
Public Structure Messwerterfassung
Public Function SetzeFührung(ByVal Führung as Führungsgröße) As integer
With MYPort
Try
.Write("Befehl1" & vbCr)
Dim Antwort As String = .ReadTo(ChrW(13))
If Antwort.Contains("!") Then
Antwort = Antwort.Remove(0, 3)
_Führung = Cint(Antwort)
Return cint(Antwort)
Else
Return -9999
End If
Catch ex As TimeoutException
Throw New ApplicationException(ex.Message, _
ex.InnerException)
Catch ex As Exception
Throw New ApplicationException(ex.Message, _
ex.InnerException)
End Try
End With
End Function
'Funktion 2, 3 usw
End structure
Public Structure Parameter
'Funktion 1, 2 usw
End Structure
End Class Das Problem ist jetzt das ich von der Struktur aus nicht auf MYPort zugreifen kann. Dieser wird blau unterringelt ("Der Verweis auf einen nicht freigegebenen Member erfordert einen Objektverweis"). Was kann man da machen? Wollte das ganze dann später so haben das ich beim Einsatz der Klasse z.B. MessGerät.Messwerterfassung.Führungsgröße(ENUM) eingeben kann.
Das zweite problemchen bezieht sich auf den Enum. Dieser soll später zulässige Werte anzeigen. Wenn ich diesen jedoch als Public deklariere kann man selbigen immer lesen und nicht erst an der Stelle wo er eingesetzt werden soll (Also schon bei Messgerät.ENUM statt erst bei MessGerät.Messwerterfassung.Führungsgröße(ENUM)). Gibt es eine Möglichkeit das der Enum nicht sofort angezeigt wird und trotzdem als Vorgabe verwendet werden kann?
Ahnungsloser ahnungsloser... | |
Re: In Klasse Stucture und Enum verwenden | | | Autor: FZelle (Moderator) | Datum: 31.08.12 11:21 |
| Structs sind für DATEN.
Was du willst sind Klassen oder Namensräume.
Und vom Bücher überfliegen lernt man selten etwas. Richtiges durcharbeiten ist da schon nötig. | |
Re: In Klasse Stucture und Enum verwenden | | | Autor: Bibobernie | Datum: 31.08.12 14:10 |
| Danke für die Antwort. Na dann weiß ich ja wonach ich schauen muss. Dann versuch ich mal herauszufinden wie ich das ganze mit Klassen bzw. Namespaces gelöst bekommen kann.
Ahnungsloser ahnungsloser... | |
Re: In Klasse Stucture und Enum verwenden | | | Autor: Bibobernie | Datum: 06.09.12 16:19 |
| So ich bin jetzt ein kleines Stück weiter (komme z.Z. leider nur unregelmäßig dazu was am Projekt zu machen). Und zwar dachte ich mir das man die Problemstellung mittels einer ausgelagerten Klasse lösen kann. Diese instanziiert man mit der Instanz der Basisklasse und bindet Sie über eine Property ein. Meine das in etwa so:
Class Basis
Public Funktionen As Fkt
Private _Uart As Serialport
Sub New(ByVal Port As Serialport)
_Uart = Port
Funktionen = New Fkt(Port)
End Sub
'weitere Subs
End Class
Class Fkt
Private FktPort As SerialPort
Sub New(ByVal Port As SerialPort)
FktPort = Port
End Sub
Public Function Test() As String
Return "Test"
End Function
'weitere Funktionen
End Class Damit kann ich über intellisens zumindest schonmal das erreichen was ich wollte. Allerdings wird die FKT-Klasse dann wie eine Variable angezeigt (blaues Quadrat im Intellisense). Sonst scheint zwar alles zu funktionieren aber eventuell ist das ja bei weitem nicht optimal...
Hat eventuell jemand noch nen etwas konkreteren Tip für mich? Würde nämlich gern wissen wie ich es hinbekommen kann das die Klasse dann auch im Intellisense wie eine Klasse angezeigt wird (allerdings erst wenn Basis instanziiert ist). Wurmt mich grad weil ich irgendwie nicht weiter komme mit meinen ansätzen...
Ahnungsloser ahnungsloser... | |
Re: In Klasse Stucture und Enum verwenden | | | Autor: FZelle (Moderator) | Datum: 07.09.12 10:49 |
| Du hast irgendwie überhaupt nicht verstanden was Klassen und was Objekte sind.
Du irrst so durch die Gegend und machst so ziemlich alles falsch, weil dir die absoluten Grundlagen fehlen.
Tue dir selber einen gefallen und lies wenigstens die Grundlagen zu Klassen und Objekten in einem Buch nochmal genau durch., z.b. http://openbook.galileocomputing.de/visual_basic/Kapitel_04-001.htm und ff. | |
Re: In Klasse Stucture und Enum verwenden | | | Autor: Bibobernie | Datum: 10.09.12 09:12 |
| So da meld ich mich zurück vom Wochenende.
Hm, das find ich nun aber doch ein wenig Unfair. Ich wende meine vermutlich nicht ausreichend vorhandenen Kenntnisse vielleicht etwas ineffektiv an, aber das ich überhaupt nicht verstanden habe was ne Klasse ist oder selbig macht möcht ich doch zurück weisen. Ich habe mir bereits einige Bücher besorgt und auch die jeweiligen Kapitel über Klassen durchgearbeitet und auch schon eine eigene Klasse erfolgreich in Aktion genommen.
Hier war ich an einem Punkt an dem mir kein Buch wirklich weiterhelfen konnte. Naja, vielleicht hast du ja recht und ich befinde mich wirklich auf dem Holzweg...
Werd dann erstmal nicht mehr nerven...
Ahnungsloser ahnungsloser... | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|