Hilfestellung bei einem Control-Aufbau (Klick-Event anhängen)

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von jan99.

    Hilfestellung bei einem Control-Aufbau (Klick-Event anhängen)

    Moin!

    ich habe diesmal wieder etwas ganz spezielles. Wir haben eine Software im Einsatz die via .net programmiert werden kann. Das Problem ist nur nur, dass der Anbieter in C# arbeitet und der mich Einweisende nicht mit vb.net bekannt ist.

    Auf der anderen Seite fehlt mir das Wissen mit dem Aufbau von Controls und dem anhängen von Events.

    Es gibt bereits jetzt folgenden Code, der soweit funktioniert.

    Die Klasse für das Control:

    VB.NET-Quellcode

    1. Imports Mum.Geo.PlugIns
    2. Imports XSystem
    3. Imports Mum.Geo.Client.Generic
    4. Public Class MyApiControlPlugIn
    5. Inherits ApiControlPlugIn
    6. Private but1 As XImageButton
    7. Public Sub New(ByVal ctrl As CTApiControl)
    8. MyBase.New(ctrl)
    9. Try
    10. but1 = New XImageButton()
    11. but1.BitmapImage = Images.Cut
    12. but1.HorizontalAlignment = XHorizontalAlignment.Stretch
    13. but1.VerticalAlignment = XVerticalAlignment.Stretch
    14. ' Hier wird ein Click-Event benötigt für eine Schaltfläche innerhalb des Controls
    15. 'but1.Click += but1_Click
    16. ' als erinnerung, wie es weitergehen kann ...
    17. ctrl.ControlHost.Children.Add(but1)
    18. Catch ex As Exception
    19. MsgBox("Fehler in MyApiControlPlugIn > New" & vbCrLf & ex.ToString)
    20. End Try
    21. End Sub
    22. End Class


    und dann den Code für den "normalen" Gebrauch:

    VB.NET-Quellcode

    1. Imports System
    2. Imports Mum.Geo.PlugIns
    3. Imports Mum.Geo.Client.Generic
    4. Imports XSystem
    5. Imports Mum.Geo.Client.Events
    6. Imports Microsoft.VisualBasic
    7. Imports Mum.Geo.DataAccess
    8. ' *... steht für die Datenbank (am besten immer *)
    9. ' hinter dem Punkt der Tabellenname
    10. <GenericFormPlugIn("*.EBL_GRUNDSTUECK")>
    11. Public Class ResetWiedervorlage
    12. Inherits GenericFormPlugIn
    13. Private bt_ResetWiedervorlage As ApiButton = New ApiButton()
    14. Private _myApiCtrl As MyApiControlPlugIn
    15. Private _connection As Connection
    16. Private _EBLog As EBL_ME_Log
    17. Public Sub New(ByVal genericForm As GenericForm)
    18. MyBase.New(genericForm)
    19. _EBLog = New EBL_ME_Log(Me.Application)
    20. AddHandler bt_ResetWiedervorlage.Click, AddressOf Do_ResetWiedervorlage
    21. ' Funktion zuweisen die auf den MODE-Wechsel von dem Dialog reagiert
    22. AddHandler Me.GenericForm.ModeChanging, AddressOf GenericForm_ModeChanging
    23. bt_ResetWiedervorlage.Content = "Erinnerung zurücksetzen"
    24. 'Verbindung von dem aktuellen Dialog anzapfen
    25. _connection = Me.Connection
    26. End Sub
    27. Public Overrides Sub Register()
    28. ' Button OHNE Bild
    29. 'Me.RegisterApiButton("$EBLDELDATE", bt_ResetWiedervorlage)
    30. ' nachfolgend wird das BUTTON MIT Bild zugewiesen auf die Schaltfläche
    31. _myApiCtrl = TryCast(Me.RegisterApiControlEx("$EBLDELDATE", GetType(MyApiControlPlugIn)), MyApiControlPlugIn)
    32. End Sub
    33. ''' <summary>
    34. ''' Button ausblenden, wenn nicht im Auskunftsmodus befindlich
    35. ''' </summary>
    36. Private Sub GenericForm_ModeChanging(ByVal sender As Object, ByVal e As ModeChangingEventArgs)
    37. If e.NewMode = DialogMode.Browse Then
    38. bt_ResetWiedervorlage.IsVisible = True
    39. End If
    40. End Sub
    41. ''' <summary>
    42. ''' Zurücksetzen des Wiedervorlagedatums auf einen LEERSTRING
    43. ''' </summary>
    44. ''' <remarks></remarks>
    45. Public Sub Do_ResetWiedervorlage()
    46. ''' hier steht der Code für die Ausführung beim Click
    47. End Sub
    48. Private Function callback() As Mum.Geo.Client.External.ShellExecuteCompleted
    49. Throw New NotImplementedException
    50. End Function
    51. End Class


    Nun möchte ich an das ButtonControl ein Click-Event anhängen mit dem Do_ResetWiedervorlage aufgerufen wird.

    Das dieses über AddHandler erfolgen muss ist bekannt - aber ich habe keine Ahnung, wo und wie ich dieses einbauen muss.

    Auch wenn das schon eine "freche" Frage gibt - vielleicht ist es für den vb.net-Profi einfach dieses zu erkennen und zu helfen?

    Gruß Jan
    Gib dem UserControl ein Event und rufe es auf:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class UserControl1
    2. Public Event MyClick(sender As Object, e As EventArgs)
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. RaiseEvent MyClick(Me, e)
    5. End Sub
    6. End Class
    Compiliere Dein Projekt, zieh das UserControl auf das GUI (sofern noch nicht vorhanden) und aboniere das Event:

    Und:
    Pack Deinen Code in einen
    Spoiler anzeigen
    Spoiler!

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Hi!
    danke erst einmal für die Rückmeldungen.

    @Facebamm: werde ich mir ansehen
    @RodFromGermany:

    So einfach ist das mit der GUI nicht. Der Dialog wird erst zu Laufzeiten von der Anwendung bereitgestellt. Ein Dialog im, für mich klassischen Sinne, ist das nicht.

    Spoiler - habe ich schon öfters gesehen. Was damit aber im Sinne des Forums gemeint ist entzieht sich meinen Kenntnissen.

    Kenne ich nur vom Auto ! <X

    Jan

    jan99 schrieb:

    Spoiler - habe ich schon öfters gesehen. Was damit aber im Sinne des Forums gemeint ist entzieht sich meinen Kenntnissen.

    Mach doch mal die Augen auf, ein post drüber sind gleich zwei davon, deutlich zu erkennen ! ;)

    jan99 schrieb:

    entzieht sich meinen Kenntnissen.
    Ein Post mit langem Code im Spoiler lässt sich viel besser lesen.
    OK.
    Wer soll wem ein Event senden?
    Was existiert davon?
    Was ist vorbereitet?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    FormFollowsFunction schrieb:

    jan99 schrieb:

    Spoiler - habe ich schon öfters gesehen. Was damit aber im Sinne des Forums gemeint ist entzieht sich meinen Kenntnissen.

    Mach doch mal die Augen auf, ein post drüber sind gleich zwei davon, deutlich zu erkennen ! ;)


    Hast Du nicht das grüne Gesicht gesehen. Das war ein Scherz womit ich aber noch nicht weiss, wie ich den erstelle!

    Jan
    Spoilererstellung: Text markieren und dann in der letzten Symbolleiste das 3. Symbol (das durchgestrichene Auge) anklicken.
    Bilder
    • Spoileralarm.png

      13,78 kB, 844×74, 14 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @jan99 Die Fragen in Post #6 sind noch nicht beantwortet.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    jan99 schrieb:

    Spoiler - habe ich schon öfters gesehen. Was damit aber im Sinne des Forums gemeint ist entzieht sich meinen Kenntnissen.

    Kenne ich nur vom Auto !


    jan99 schrieb:

    Hast Du nicht das grüne Gesicht gesehen. Das war ein Scherz womit ich aber noch nicht weiss, wie ich den erstelle!

    Jan


    Veräppeln kann ich mich auch selber. ;)
    Und wenn du es doch nicht weißt, warum fragst du dann nicht ?
    Du willst doch Hilfe, also arbeite gefälligst auch ein bischen mit !
    z.B. mal die im Raum stehenden Fragen beantworten !
    Moin!

    es waren einige andere Baustellen für eine gezielte Beantwortung dazwischen gekommen.

    Wer soll wem ein Event senden?
    Ich habe ja oben den bisherigen Code gepostet und im Grunde soll dieses Control ja in dem anderen Codeteil verwendet werden. Dort wird ja auch MyApiControlPlugIn eingebunden. Wenn auf den Button geklickt wird, dann soll die Funktion X ausgelöst werden.

    Wenn ich andere Controls habe, wie ein Button, dann steht mir doch auch dort wo ich diesen Button verwende ein Click-Event zur Verfügung.

    Ansonsten weiß ich nicht wie ich es anders beschreiben soll.


    Was existiert davon?
    nur der Code der #1 steht. oder ???

    Was ist vorbereitet?
    nur der Code der #1 steht. oder ???

    Sorry, wenn ich nicht mehr dazu sagen kann!

    Gruß Jan
    Dir hier zu helfen wird sehr schwierig.
    Du hast da scheints eine professionelle PlugIn-Dll vorliegen, die Ribbons unterstützt - richtig?

    Erinnert mich jdfs. stark an meine Übungen, per für Microsoft.Exchange-Dll ein Outlook-PlugIn zu erstellen.
    Ist eine ziemlich verquere Logik, und mit starken Anleihen an Wpf.
    Wie das bei mir damals funztete krieg ich jetzt auch nicht mehr auf Reihe.

    RodFromGermany schrieb:

    @jan99 Die Fragen in Post #6 sind noch nicht beantwortet.


    Ribbon nicht direkt - aber so vergleichbar und von einem Profi-Unternehmen.

    Ich werde den Bereich wohl etwas zurück stellen und man muss nicht alles machen, was nice-to-have ist.

    Gruß Jan