vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Component und Event prozeduren 
Autor: dj.tommy
Datum: 17.06.19 16:25

Hallo Leute!

Kurze Frage

Ich möchte eine eigene Komponenten erstellen

aber je nach dem man die Property Eigenschaften einstellt, das nach der Einstellung

Gewisse Event Prozeduren erscheinen?

Sollte es jemand nicht genau wissen, was ich meine mache ich ein bei spiel:

im Komponenten Class befinden sich 2 Prozeduren

Public Event Test1( ByVal Wert As Integer)
Public Event Test2( ByVal Wert As String)
und eine Property
    Enum _Wahl
        [Zahl]
        [String]
    End Enum
    Dim VWahl As _Wahl
 
    Public Property Wahl() As _Wahl
        Get
            Return VWahl
        End Get
        Set(ByVal Value As _Wahl)
            VWahl = Value
        End Set
    End Property
Wenn jetzt im Form unter Property Wahl die Einstellung Zahl hat
das die Prozedur
Sub Test1( ByVal Wert As Integer)
 
End Sub
Erscheint.
Wenn jetzt aber im Form unter Property Wahl die Einstellung String eingestellt ist, das dann die Prozedur
Sub Test2( ByVal Wert As String)
 
End Sub
Erscheint.
Ist Sowas möglich, wenn ja wie muss, ich es machen
ich habe es leider nur so geschafft.
#Const einstellung = 0
#If einstellung = 0 Then
    Public Event Test1( ByVal Wert As Integer)
#Else
    Public Event Test2( ByVal Wert As String)
#End If
Wird die Einstellung, 0 angegeben wird im Form Test1 angezeigt und bei anderen zahl Test2 angezeigt
leider schaffe ich es nicht per Property einzustellen.

Danke im Voraus.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: sv00010
Datum: 17.06.19 19:09

Grober Beispielcode:
Public Class Event_Wahl
    Inherits System.EventArgs
 
    Public Structure WAHL
        'Einen Wert für die Auswahl des verwendeten Typs
        'und für jeden im Enum deklarierten Wert ein Variable deklarieren
        'Es soll immer nur die Value_WAHL..-Variable mit Werten gefüllt werden,
        'welche bei Selected_Wahl eingstellt wurde.
        'Die andere Value_WAHL..-Variable dann einfach unbenutzt lassen.
        Dim Selected_Wahl           As ENUM_SELECTED_WAHL
        Dim Value_WAHL_Zahl_Integer As Integer
        Dim Value_WAHL_String       As String
 
        Public Enum ENUM_SELECTED_WAHL As Integer
            WAHL_Zahl_Integer           = 0
            WAHL_String                 = 1
        End Enum
 
    End Structure
 
    Dim Value_WAHL As WAHL
 
    Sub New(ByVal Wahl_IN  As WAHL)
        Value_WAHL = Wahl_IN
    End Sub
 
    ReadOnly Property Value_Wahl As WAHL
        Get
            return Value_WAHL
        End Get
    End Property
 
End Class
Die selbsterstellte Event-Klasse soll dann in die Komponente rein, damit von überall darauf zugegriffen werden kann.
In der Komponente muss dann noch ein EventHandler erstellt werden, welcher mit public deklariert ist,
sodass er im Hauptprogramm an die Routine gebunden werden kann.
Wenn dann die Komponente ein Event_Wahl auslöst (musst du selber programmieren, wann das sein soll), dann springt die Code-Ausführung in die Routine, welche an den EventHandler in der Komponente gebunden ist.
Das bedeutet die Code-Ausführung springt ins Hauptprogramm.
Da das Event_Wahl die ganzen Werte, welche ausgewählt wurden enthält kann dann per Select Case einfach die entsprechende Unterroutine aufgerufen werden.
Man könnte natürlich auch zwei Event-Klasen erstellen und diese stattdessen gleich an die entsprechenden Unterroutine binden.
Ich habe das allerdings erstmal so gemacht, damit die allgemeine Funktionionsweise erkennbar bleibt.

Beitrag wurde zuletzt am 17.06.19 um 19:19:05 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: dj.tommy
Datum: 17.06.19 21:06

Hallo sv00010!
Sorry da stehe ich aber sowas auf dem schlau.

Wenn du mal zeit und Lust hast, würdest du es mir genauer erklären?
Ich habe mir dein Text mindestens 10 mal durchgelesen.
Und herumprobiert aber da komm ich nicht auf einem grünen Zweig.
Es hapert allein schon von der Erstellung von EventHandler da kommen nur Fehler und kann mir nicht vorstellen, wie du das meinst, so das die Prozedur Test1 oder Test2 im Komponenten Klasse freigeschaltet werden, so das es im Form sichtbar ist.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: Kuno60
Datum: 18.06.19 01:00

Hallo,

ich verstehe zwar nicht, welchen Sinn das haben soll, ein Event per Eigenschaft einzustellen...

Hier mal ein paar Vorschläge:

Erstelle 2 Events und benutze nur eins davon.
Public Event Test1(wert As Integer)
Public Event Test2(wert As String)
Erstelle ein Event mit 2 Argumenten.
Public Event Test(zahl As Integer, zeichen As String)
Erstelle ein Event als Object und teste den Typ in der behandelnden Sub.
Hier wäre es auch möglich, abhängig von einer Einstellung, einen Integer oder String-Wert zurück zu geben.
Public Event Test(wert As Object)
 
 
' in der Form
Private Sub Komponente_Test(wert As Object) Handles Komponente.Test
  If TypeOf wert Is Integer Then
 
  ElseIf TypeOf wert Is String Then
 
  End If
End Sub
Oder mit generischem Typ. Kann dann aber nur per Code erstellt werden, da dies der Designer nicht unterstützt.
Im Editor wird über die Auswahl des Events (Test), über die Navigationsleiste, dann der richtige Typ eingefügt.
Public Class MeinControl(Of T)
 
  Public Event Test(wert As T)
 
End Class
 
 
Public Class Form1
 
  Dim WithEvents Komponente As New MeinControl(Of Integer) 'gewünschter Typ
 
  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.Controls.Add(Komponente)
  End Sub
 
  ' automatisch eingefügt:
  Private Sub Komponente_Test(wert As Integer) Handles Komponente.Test
 
  End Sub
 
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: sv00010
Datum: 18.06.19 06:17

dj.tommy schrieb:
Zitat:


Es hapert allein schon von der Erstellung von EventHandler da
kommen nur Fehler und kann mir nicht vorstellen, wie du das
meinst, so das die Prozedur Test1 oder Test2 im Komponenten
Klasse freigeschaltet werden, so das es im Form sichtbar
ist.

Ich benutze das eigentlich immer in C#.
Es ist wirklich zu kompliziert.
Verwende jetzt einfach nur die Structure zum Speichern der Auswahl.

Public Structure WAHL
        'Einen Wert für die Auswahl des verwendeten Typs
        'und für jeden im Enum deklarierten Wert ein Variable deklarieren
        'Es soll immer nur die Value_WAHL..-Variable mit Werten gefüllt werden,
        'welche bei Selected_Wahl eingstellt wurde.
        'Die andere Value_WAHL..-Variable dann einfach unbenutzt lassen.
        Dim Selected_Wahl           As ENUM_SELECTED_WAHL
        Dim Value_WAHL_Zahl_Integer As Integer
        Dim Value_WAHL_String       As String
 
        Public Enum ENUM_SELECTED_WAHL As Integer
            WAHL_Zahl_Integer           = 0
            WAHL_String                 = 1
        End Enum
 
    End Structure
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: Manfred X
Datum: 18.06.19 08:10

Hallo!

Erkläre, was genau Du erreichen möchtest.
Mit Deiner Planung scheinst Du auf dem Holzweg zu sein.
Gewöhnlich leidet man in solchen Fällen von einer Basisklasse
weitere Klassen ab, die eigene Methoden oder Events hinzufügen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: dj.tommy
Datum: 18.06.19 16:33

Hallo sv00010!
Die Struktur kenne ich, das hat so in VB.Net eh funktioniert, aber ich habe dich nicht genau verstanden, wie ich es machen soll, das die Event-Prozeduren freischalten werden.

Hallo Kuno60!
Dein Vorschlag sieht für mich nicht gut aus für eine Komponenten Klasse Sorry.

Hallo Manfred X!
Bitte schimpfe nicht mit mir.
Ich weiß, dass ich eigentlich von Alten VB6 loslassen sollte.
Aber ich komme einfach nicht hinweg, wie ich das sonst machen sollte.

Also was habe ich vor
Ich erstelle eigene Komponenten Klasse, mit TCP Socket Funktion, die man per Code oder per Design einbinden kann.
Es funktioniert soweit gut, nun soll es auch noch die Funktion haben, das man mehreren Verbindungen aufnehmen kann.

Für mich ist es auch sehr wichtig, das man auch die Verbindung auseinander halten kann.
d.h. wenn z.b: Der Server ist mit 5 Clienten verbunden ist, und man will Nachricht oder Daten an Client 3 senden, das man weiß, wo der Client 3 Verbindung ist.

Im VB6 mittels Winsock hat man es mit Index gemacht.
Und so was in der Richtung möchte ich auch machen.
Winsock mit nur einer Verbindung war z.b: DataArrival so.

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
 
End Sub
und hatte man mehrere Verbindungen, konnte man die Verbindung mittels Index auseinander halten, daher war die Prozedur so
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
 
End Sub
somit wusste man durch Index wer was geschickt hat.
Und bei senden:

Winsock1(Index).SandData()
auf dem richtigen Rechner zurücksenden.

Ich habe kein Passenden Code gefunden, wie man das macht.

Ich habe im Internet unter vb-paradise.de den Versuch Chat gefunden.

Da wird erklärt, wie die Nachricht an alle Chats gesendet werden.
Public Overrides Sub Send(ByVal Msg As String)
OnChatMessage(New MessageEventargs(Msg)) ' anzeigen
For Each C As Client In _Clients ' an alle versenden
C.Send(Msg)
Next
End Sub
nun wie soll ich jetzt herausfinden wer, wer ist.

Also war, meine einzige Lösung, mach es wie Winsock mittels Index, den sobald eine Verbindung akzeptiere wird, legt man sich ein Index Nummer an, wenn eine Nachricht ankommt, das man mit Index Nummer ermitteln kann wer das ist.

wenn Daten gesendet wird, das es mittel Index auch an den Richtigen gesendet wird.

Wenn du weißt wie ich das im Komponenten ein programmieren soll,
das wenn mehrere Verbindungen sind, so das es an die richtige Verbindung, die Daten gesendet werden.
Und das man weiß, von wem die Daten kommen.
Dann würde ich gerne dein Ratschlag erfahren.

Mfg DjTommy
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: Manfred X
Datum: 18.06.19 18:59

Meinst Du die Zuordnung einer Ereignisverarbeitung zu
verschiedenen Instanzen einer Klasse???
Public Class frmZZZ
 
    'eine Klasse, von der mehrere Instanzen verwendet werden sollen
    Private Class xxx
 
        Public Event xxx_event(sender As Object, e As EventArgs)
 
        Public Sub eventraiser()
            RaiseEvent xxx_event(Me, EventArgs.Empty)
        End Sub
 
    End Class
 
    'Liste der Klasseninstanzen
    Dim lstXXX As New List(Of xxx)
 
 
    Private Sub frmZZZ_Load(sender As Object, _
        e As EventArgs) Handles MyBase.Load
 
        'Diverse Klasseninstanzen erstellen
        For i As Integer = 0 To 10
            Dim xxx_inst As New xxx
            'Handlerroutine einem Event der Instanz zuordnen
            AddHandler xxx_inst.xxx_event, AddressOf xxx_eventhandler
 
            'Neue Instanz in der Instanz-Liste hinzufügen
            lstXXX.Add(xxx_inst)
        Next i
 
        'Ein Event auslösen
        lstXXX(7).eventraiser()
    End Sub
 
    Public Sub xxx_eventhandler(sender As Object, e As EventArgs)
 
        'Im gemeinsamen Handler den Liste-Index der sendenden Instanz ermitteln
        Dim index As Integer
        For i As Integer = 0 To lstXXX.Count - 1
            If sender Is lstXXX(i) Then index = i
        Next i
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: dj.tommy
Datum: 18.06.19 19:20

Hallo Manfred X!
nun ja so in der Richtung.
Aber da muss man alles in Form aufbauen und das wollte ich ja nicht.
Ich wollte, das alles im Komponenten passiert und im Form in eine Prozedur wieder geben so wie Winsock ist viel leichter und übersichtlicher.

Verstehst du was ich meine
deswegen wollte ich wissen, wie ich je nach Einstellung die Komponenten Event Prozeduren sich anpassen.

Aber trotzdem Danke für deine antworten
schön Abend noch.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: Manfred X
Datum: 18.06.19 19:47

Dein DataArrival-Index im VB6-Code ergibt sich aus der Verwendung
eines Steuerelemente-Feldes.
Ich habe Dir die Entsprechung in VB.Net gezeigt. Dieses Vorgehen
(List, Addhandler) kannst Du genauso innerhalb einer Komponente
verwenden.

https://activevb.de/tutorials/tut_vbnetcontrolarrays/vbnetcontrolarrays.html

Du kannst auch ein Usercontrol erstellen, daß die Verwaltung mehrerer
Winsocks übernimmt und die Kommunikation als Events mit dem jeweiligen
Index an das nutzende Programm weiterleitet.

Beitrag wurde zuletzt am 18.06.19 um 20:06:54 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: sv00010
Datum: 18.06.19 20:30

dj.tommy schrieb:
Zitat:

Hallo sv00010!
Die Struktur kenne ich, das hat so in VB.Net eh funktioniert,
aber ich habe dich nicht genau verstanden, wie ich es machen
soll, das die Event-Prozeduren freischalten werden.


Ich habe ein Beispiel-Projekt erstellt (Visual Studio 2017)
Beispiel-Projekt Download

Beitrag wurde zuletzt am 18.06.19 um 20:31:36 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: dj.tommy
Datum: 18.06.19 20:41

Hallo sv00010!

Erstmal danke für deine Mühe, aber Google lässt mich nicht herunterladen
Zitat:

Diese Datei ist leider mit einem Virus infiziert.

Nur der Eigentümer ist dazu berechtigt, infizierte Dateien herunterzuladen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: sv00010
Datum: 18.06.19 21:37

Ich habe es nochmal hochgeladen:
Downloadlink
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: dj.tommy
Datum: 19.06.19 17:11

Hallo sv00010!

Danke dir, ich schau mir das mal an
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: sv00010
Datum: 19.06.19 17:35

dj.tommy schrieb:
Zitat:

Hallo sv00010!

Danke dir, ich schau mir das mal an


Wenn du dann das Prizip verstanden hast, dann kannst du je nach Bedarf weitere Event-Klassen erstellen, mit immer den entsprechenden Daten, welche für das entsprechende Event benötigt werden.
In deinem Fall könnte das z.B. ein Event sein, was du auslöst, solltest du mitbekommen, dass die Netzwerkverbindung unterbrochen wurde usw.

Beitrag wurde zuletzt am 19.06.19 um 17:36:26 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: dj.tommy
Datum: 19.06.19 19:33

Hallo Leute!
Ich glaube das ich wirklich auf dem Holzweg war, so wie Manfred X gesagt hat.
Da es mit es keine ruhe gegeben hat, habe ich VMware Player gestartet wo ich Windows XP installiert habe.
Und habe VB6 geöffnet und Winsock noch mal genauer angesehen.

und bin der glauben das das ganze so Funktioniert.
Da im VB6 noch Index gab, gab es auch unter den Eigenschaften den Index.
Hatte man bei Index einen wert eingegeben, wusste der VB6-Editor, er soll Winsock oder andere Steuerelemente, das er diesen Steuerelemente als Arrays Anzahl die im vorgegeben wurde erstellt.
Und daher wurde unter der Prozedur auch Index Argument hinzugefügt.
Frage lege ich mit meinen Gedanken Richtig?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Component und Event prozeduren 
Autor: Manfred X
Datum: 19.06.19 23:54

https://www.vbarchiv.net/forum/id10_i76703t76694_component-und-event-prozeduren.html
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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