| |
VB.NET - FortgeschritteneFunktion mit fest definierten Parametern | | | Autor: henrikl2000 | Datum: 30.03.15 20:31 |
| Hallo,
Wie baue ich einer Funktion mit fest definierten Parametern zur Wahl wie zum Beispiel Color?
Es soll so funktionieren das wenn ich die Funktion TestFunc aufrufe die Parametern die zur Wahl steht in eine Liste angezeigt wird.
Private Function TestFunc(ByVal param As ???) As ???
End Function Soll param als Enum aufgebaut werden oder? Und wie?
Danke schon im Voraus
0 | |
Re: Funktion mit fest definierten Parametern | | | Autor: Manfred X | Datum: 30.03.15 21:15 |
| Hallo!
Das funktioniert durch das Konzept der Überladung von Methoden.
(Du erstellst mehrere Funktionen mit dem gleichen Namen in der gleichen Klasse,
aber mit unterschiedlichen Parameterlisten. Die IDE zeigt die Varianten an.)
Beitrag wurde zuletzt am 30.03.15 um 21:24:15 editiert. | |
Re: Funktion mit fest definierten Parametern | | | Autor: henrikl2000 | Datum: 30.03.15 21:34 |
| Hallo,
Danke für deine Antwort.
Es tut mir leid aber das verstehe ich nicht ganz.
Ich wusste nicht dass man mehrere Funktionen mit demselben Namen haben kann.
Könntest du mir ein Beispiel geben? 0 | |
Re: Funktion mit fest definierten Parametern | | | Autor: Blackbox | Datum: 30.03.15 21:51 |
| Hi,
fest eingebaute Parameter nennt man Konstante. Mehrere solche Konstante werden in einer Enumeration zusammen gefasst.
Innerhalb des Moduls oder (nur andere Bezeichnung dafür) Namespace erstellst Du eine Enum-Struktur wie folgt:
Enum MyKonst
Test = 1
Test2 = 2
Test4 = 3
End Enum | |
Re: Funktion mit fest definierten Parametern | | | Autor: Manfred X | Datum: 30.03.15 21:56 |
| Ich bin mir nicht sicher, ob ich Deine Zielsetzung richtig begriffen habe.
Hier ein triviales Beispiel zur Überladung.
Die IDE bietet zwei Parameter-Varianten der Methode "TextInsert" an.
Der erste Parameter kann vom Typ String oder vom Typ Stringbuilder sein.
Public Class TextOps
Public Shared Function InsertText _
(ByVal text As System.Text.StringBuilder, _
ByVal textToInsert As String, startposition As Integer) As _
String
Return text.Insert(startposition, textToInsert).ToString
End Function
Public Shared Function InsertText_
(ByVal text As String, _
ByVal textToInsert As String, startposition As Integer) As _
String
Dim stb As New System.Text.StringBuilder(text)
Return InsertText(stb, textToInsert, startposition)
End Function
End Class "Drawing.Color" ist eine spezielle Struktur, die über eine Liste von
Membervariablen verfügt (=benannte Farben), die jeweils einen ARGB-Farbwert darstellen
(Abfrage per: Shared ReadOnly Property).
Das hat mit den Parametern einer Methode oder einer Enumeration (Liste benannter numerischer Werte)
nichts zu tun.
Beitrag wurde zuletzt am 30.03.15 um 22:05:39 editiert. | |
Re: Funktion mit fest definierten Parametern | | | Autor: henrikl2000 | Datum: 30.03.15 22:17 |
| Danke nochmals.
Mein Deutsch ist leider nicht so gut wie ich es mir wünscht.
Ich habe es mit Enums versucht. Wenn ich jetzt VehicleClass aufrufe erhalte ich eine Liste.
Aber mein Ziel ist in Richtung wie Liste von Membervariablen. Geht das irgendwie?
Public Enum VehicleGroups
Gruppe1 = 1
Gruppe2 = 2
Gruppe3 = 3
Gruppe4 = 4
Gruppe5 = 5
Gruppe6 = 6
Gruppe7 = 7
End Enum
Private Sub VehicleClass(ByVal Gruppe As VehicleGroups)
End Sub 0 | |
Re: Funktion mit fest definierten Parametern | | | Autor: henrikl2000 | Datum: 30.03.15 22:18 |
| Danke für deine Antwort. 0 | |
Re: Funktion mit fest definierten Parametern | | | Autor: Manfred X | Datum: 30.03.15 23:02 |
| So ganz klar ist mir Dein Anliegen noch nicht.
Eine Auflistung von Properties in einer Struktur würde so aussehen:
Public Structure ColorX
''' <summary>Die Farbe Zartrosa als Drawing.color</summary>
Public Shared Property ZartRosa As Color = Color.FromArgb(255, 192, 203)
''' <summary>Die Farbe Himmelblau (SkyBlue) als Drawing.color </summary>
Public Shared Property Himmelblau As Color = Color.SkyBlue
''' <summary>Die Farbe Goldgelb als Drawing.color </summary>
Public Shared Property GoldGelb As Color = Color.FromArgb(205, 164, 52)
End Structure Bei Eingabe von "ColorX." im Code, wird diese Member-Liste angezeigt und der
korrespondierende Wert kann auf eine Color-Variable zugewiesen werden.
Wäre dies die Funktion ...
Public Sub SetColor(c As Color)
'....
End Sub ... könnte sie so gerufen werden ....
SetColor(ColorX.GoldGelb) Dieses Vorgehen setzt voraus, daß die Member der Liste Instanzen von der gleichen
Klasse bzw. Struktur sind und sie sich nur in den Datenwerten unterscheiden.
Hast Du unterschiedliche Klassen, wäre es - falls möglich - zweckmäßig, eine Basisklasse
zu erstellen aus der die spezifischen Klassen abgeleitet werden.
Beitrag wurde zuletzt am 30.03.15 um 23:12:21 editiert. | |
Re: Funktion mit fest definierten Parametern | | | Autor: henrikl2000 | Datum: 31.03.15 11:16 |
| Hallo Manfred,
Danke für deine Antwort.
Das ist auch nicht ganz was ich suche aber das kann ich trotzdem bestimmt immer mal verwenden.
Was ich meine ist deine Antworte sind immer interessant und ich lerne davon.
Du erklärt immer so dass man es versteht.
Was ich suche ist eine Lösung das funktioniert wie beim Color und andere das man beim Tippen (aufrufen der Funktion) Vorschläge in eine Liste bekommt.
Ein einfache Beispiel wo eine Liste erscheint.
Dim aa As Boolean
aa= Beim Tippen aa= erscheint eine Liste mit False bspw. True
Ich hoffe du verstehst was ich meine.
0 | |
Re: Funktion mit fest definierten Parametern | | | Autor: henrikl2000 | Datum: 31.03.15 14:43 |
| Hallo DaveS,
Danke für deine Antwort.
Ja fast. Dass habe ich schon versucht. Geht auch nur wollte ich es gerne kürzer haben. Wie beim True / False sowie in deinem Bild aber nur mit val, val2 usw. zur Wahl. Also ohne SomeNumbers in die Liste.
Ich habe schon ManfredX viel Kummer gemacht.
Aber vielleicht geht das gar nicht.
Auf jedem Fall bedanke ich mich für eure Lösungen.
0 | |
Re: Funktion mit fest definierten Parametern | | | Autor: Kuno60 | Datum: 31.03.15 16:53 |
| Hallo,
nur die Membernamen auflisten ist nicht möglich.
Es muss immer der Enum-Name oder bei statischem Code, der Name der Klasse oder Struktur vorangestellt werden.
Nur was im selben Bereich oder in einem Modul steht oder wenn der Name Importiert wurde, werden die Member direkt aufgelistet.
In der kommenden Version, VS 2015, soll es möglich sein die Namensvorsätze wegzulassen, also statt Math.Sin() braucht man dann nur noch Sin() zu schreiben.
| |
Re: Funktion mit fest definierten Parametern | | | Autor: henrikl2000 | Datum: 31.03.15 16:57 |
| Hallo Kuno60,
Vielen Dank für die Aufklärung. Das was sehr hilfreich.
Gruß,
Henrik 0 | |
Re: Funktion mit fest definierten Parametern | | | Autor: Manfred X | Datum: 31.03.15 18:34 |
| Hallo!
Das was Du suchst, geht meines Wissens nicht.
Möglich ist nur der Import von Klassen,
deren zwar Member im Code direkt nutzbar sind -
die IDE zeigt sie aber bei der Parametrisierung nicht an,
wenn der Klassenname davor fehlt. Während des Eintippens
eines Parameters wird immerhin die "Auto-Complete" der IDE aktiv.
Public Class PersonX
Public Shared ReadOnly Property KurtSchmalz As Person
Get
Return New Person("Kurt Schmalz", "Metzger", 1970)
End Get
End Property
Public Shared ReadOnly Property GundolfBoni As Person
Get
Return New Person("Gundolf Boni", "Investmentbanker", 1982)
End Get
End Property
Public Shared ReadOnly Property AlbertusSpekulatius As Person
Get
Return New Person("Albertus Spekulatius", "Wertpapierbroker", 1990)
End Get
End Property
End Class
Public Class Person
Dim _name As String
Public ReadOnly Property Name As String
Get
Return _name
End Get
End Property
Dim _beruf As String
Public ReadOnly Property Beruf As String
Get
Return _beruf
End Get
End Property
Public Property _Geburtsjahr As UShort
Public ReadOnly Property Geburtsjahr As UShort
Get
Return _Geburtsjahr
End Get
End Property
Public Sub New(pname As String, pberuf As String, pgeburtsjahr As UShort)
_name = pname
_beruf = pberuf
_Geburtsjahr = pgeburtsjahr
End Sub
End Class Anwendung in einem Formular:
Imports <Projektbezeichnung>.PersonX
Public Class frmDemo
Private Sub frmDemo_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Personbearbeitung(KurtSchmalz)
'oder
Dim pers As Person = GundolfBoni
End Sub
Public Sub Personbearbeitung(ByVal p As Person)
'Code zur Bearbeitung einer Person
End Sub
End Class
Beitrag wurde zuletzt am 31.03.15 um 18:48:00 editiert. | |
Re: Funktion mit fest definierten Parametern | | | Autor: Manfred X | Datum: 31.03.15 19:15 |
| Hallo Dave!
Wie von mir weiter oben im Thread dargelegt,
macht die Color-Struktur es schon ein wenig anders.
Die benannten Farben (Shared Members) werden
intern als Long geführt.
In der IDE sieht die Liste aber ähnlich aus.
Beitrag wurde zuletzt am 31.03.15 um 19:25:51 editiert. | |
Re: Funktion mit fest definierten Parametern | | | Autor: henrikl2000 | Datum: 01.04.15 14:28 |
| Hallo,
Danke für deine immer schnelle Antworte.
Auch eine gute Lösung.
Gruß,
Henrik
0 | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|