Handles-Klausel verschwindet

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Handles-Klausel verschwindet

    Hallö,

    hab mal ne Frage.

    Ich erstelle auf meiner Form mehrere Buttons durch eine Taste.

    Hier ein Beispiel an einem Button:

    VB.NET-Quellcode

    1. Private WithEvents PanelAnzButtonNew As New Button
    2. PanelAnzPanel.Controls.Add(PanelAnzButtonNew)
    3. Private Sub PanelAnzButtonNew_Verbindung_Click(sender As Object, e As EventArgs) Handles PanelAnzButtonNew.Click
    4. ' Mach irgendwas
    5. End Sub


    Soweit funktioniert alles.
    Jetzt starte ich und kann auch alles simulieren.

    Wenn ich aber das Debugging beende und im Editor auf speichern drücke,
    sieht der Code so aus:

    VB.NET-Quellcode

    1. Private Sub PanelAnzButtonNew_Verbindung_Click(sender As Object, e As EventArgs)


    Die Handles-Klausel is weg!!!
    Und die Frage is jetzt wo ise hin ?(

    Hat jemand auch so ein Problem?


    Ich benutze übrigens Microsoft Visual Studio Community 2019.

    MfG DocHoff
    Willkommen im Forum.

    Kann ich nicht nachvollziehen. Hab mir ein Panel namens PanelAnzPanel auf's leere Form gezogen, dann einen Button, der mir PanelAnzPanel.Controls.Add(PanelAnzButtonNew) ausführt, ich starte die App, klicke den Button, der PanelAnzButtonNew-Button erscheint, ich schließe die App und klicke auf Speichern. Aber die Sub PanelAnzButtonNew_Verbindung_Click mit Handles-Klausel bleibt erhalten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo,

    ich experimentiere gerade noch ewas herum,
    aber ich glaube es liegt daran:

    Die Buttons werden in ein Panel erzeugt.
    Wenn ich die Form nach einer Eingabe wechsle wird das Panel entfernt (.Remove)
    aber die einzelnen Buttons hab ich vergessen zu removen.

    Was ich nur nicht kapiere ist dass das Auswirkungen auf den Quellcode hat???

    MfG DocHoff
    @DocHoff Pack mal alle Deine GUI-Elemente im Designer auf die Form.
    Schalte mit der Taste deren Sichtbarkeit.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab das gleiche Phänomen:
    Ich brauche nur in der Form einen Button zu entfernen und schon passiert das:

    Private Sub MySchachBrettIF_OnBrettSchlagMarkenShow(pZUG As clsSchachZug)
    Me.UcSchachSpielbrett1.MyZUG = pZUG
    End Sub


    hie fehlt einfach: Handles MySchachBrettIF.OnBrettSchlagMarkenShow

    Habe mir nun alle Einträge mit Kommentaren gesichert:

    'Private Sub MySchachBrettIF_OnBrettSchlagMarkenShow(pZUG As clsSchachZug) Handles MySchachBrettIF.OnBrettSchlagMarkenShow
    ' Me.UcSchachSpielbrett1.MyZUG = pZUG
    'End Sub


    So dass ich sie nur kopieren und entkommentieren muss.

    Kann aber wirklich nicht des Rätsels Lösung sein, oder?
    Beim entfernen oder ausschneiden eines Controls wird die Handles Klausel des zugehörigen Events entfernt. Das ist wohl so, mir zumindest seit Jahren bekannt. Man gewöhnt sich dran. Soweit ich weiß passiert das bei C# nicht.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Xiretsa schrieb:

    Ich brauche nur in der Form einen Button zu entfernen und schon passiert das:
    Ja, sicher. Visual Studio geht natürlich davon aus, dass das Control dann weg ist. Würde ja Fehler produzieren, wenn man den Button entfernt und die Handles-Klausel noch da wäre. Dann sagt ja der Code:
    »Reagiere auf das Event von ButtonDerSchonLängstNichtMehrExistiert.«
    Das passiert in C# und das nervt mich, wenn ich in C# arbeite.

    @DocHoff: Kannst Du mal ne Beispiel-App plus Schritt-für-Schritt-Anleitung per [+ Erweiterte Antwort] _hochladen_, die das Problem auch für uns nachvollziehbar macht?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Neu

    mrMo schrieb:

    Soweit ich weiß passiert das bei C# nicht.
    C# arbeitet auch mit dem AddHandler-Äquivalent.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    Danke für die Antworten, aber ich habe mich missverständlich ausgedrückt.
    In der Code-Klasse des Formulars [FrmSS] nutze eine Schnittstelle [IFSchachBrett], die in der Klasse [clsSchachIF] implementiert ist.

    VB.NET-Quellcode

    1. Public Class FrmSS
    2. Private mDragAndDrop As String = ""
    3. Private WithEvents MySchachIF As clsSchachIF
    4. Private WithEvents MySchachBrettIF As IFSchachBrett


    Eines der Events aus der Schnittstelle, die das Formular behandeln soll, heißt z.B.: [OnBrettSchlagMarkenShow(...)

    VB.NET-Quellcode

    1. Private Sub MySchachBrettIF_OnBrettSchlagMarkenShow(pZUG As clsSchachZug) Handles MySchachBrettIF.OnBrettSchlagMarkenShow
    2. Me.UcSchachSpielbrett1.MyZUG = pZUG
    3. End Sub

    Das Formular beinhaltet Buttons, Textboxen und UserControls, um meinen Code zu testen. Unter anderem den folgenden Button:

    VB.NET-Quellcode

    1. Private Sub btnPGNImport_Click(sender As Object, e As EventArgs) Handles btnPGNImport.Click
    2. Dim xPGNImport As New clsSchachPGNImport
    3. xPGNImport.Read()
    4. TextBox1.Text = xPGNImport.Write
    5. End Sub

    Dieser Button hat nun nichts mit der Schnittstelle aus der obigen Klasse zu tun, ausser dass er und die Schnittstelle Bestandteile der Klasse sind.
    Ich habe auf der Form nun ein Panel eingefügt, den Button aus der Form ausgeschnitten und im Panel wieder eingefügt.
    Dass das Handle des Buttons verschwindet - ok, aber dass die Handles der Schnittstelle zum Teufel gehen, die im Code weit und breit nichts miteinander zu tun haben, als wie gesagt in der gleichen Form zu sitzen, das verstehe ich dann doch nicht...

    PS: Die Handles anderer Objekte verschwinden nicht, nur die der Schnittstelle...

    Neu

    Hallo,

    kann heute leider nur kurz antworten, hab ne Schulung.

    Aber dieses Problem betrifft augenscheinlich nur Buttons, muss ich aber noch mal testen.

    Ich kann das Problem replizieren, und zwar so:

    1. erstelle leere Form.
    2. designe drei Buttons auf die Form (Panel erstellen, Button erstellen, Panel entfernen).
    3. erzeuge ein Panel (mit Panel erstellen).
    4. erzeuge in das Panel einen Button (mit Button erstellen).
    5. remove das Panel (mit Panel entfernen, nur das Panel, nicht den Button im Panel).
    6. erzeuge das Panel erneut (wieder Panel erstellen).
    7. erzeuge den Button erneut (auch wieder Button erstellen).
    8. beende Debugging und speichere = Klausel verschwindet vor meinen Augen.

    Wenn ich das Panel remove und auch den enthaltenen Button ordnungsgemäss remove passiert das ganze nicht.

    Sry heute schaffe ich mehr nicht, ich schieb morgen mal ne Applikation nach.

    MfG DocHoff

    Neu

    VaporiZed schrieb:

    Kannst Du mal ne Beispiel-App […] _hochladen_
    Schade, keine dabei.
    Ehm … ja. Das Problem mit Deiner Anleitung:
    • erzeuge ein Panel -> ich vermute mit Me.Controls.Add(New Panel …
    • erzeuge in das Panel einen Button -> ich vermute mit ObenGenanntesPanel.Controls.Add(New Button …
    • remove das Panel -> ich vermute mit Me.Controls.Remove(ObenGenanntesPanel)

    • und spätestens bei 8.: "Klausel verschwindet": Mit dieser Anleitung voller Vermutungen gibt es überhaupt keine Handles-Klausel.
    ##########

    @Xiretsa: Sorry, das sind mir zuviele Unbekannte.
    Ich habe ein Panel, einen Button auf meinem Form. Und folgenden Code:

    VB.NET-Quellcode

    1. Public Class FrmMain
    2. Private WithEvents Foo As IFoo
    3. Private Sub Bazz() Handles Foo.Bar
    4. End Sub
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. End Sub
    7. End Class
    8. Public Interface IFoo
    9. Event Bar()
    10. End Interface

    Ich schneide den Button vom Form aus und packe ihn ins Panel. Oder vice versa. Aber das Handles Foo.Bar bleibt. Auch hier bitte ich um eine TestApp.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Neu

    @DocHoff Wenn Du ein Control aus der GUI mit Delete oder Cut entfernst, verschwindet das Handles ....
    Wenn das Handles ... bleibt stehen, solange das Control die Form nicht verlässt.
    Wenn Du also im Designer das Control einem anderen Container zuweisen willst, verschiebe es mit der Maus zunächst auf einen freien Platz ebendieser Form, richte den neuen Container und ziehe das Control da hin.
    Feddich.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    Hallo,

    ich versuche mal ein Beispielprojekt hochzuladen.

    Mein Problem lässt sich noch einfacher reproduziern:

    Wenn ich auf der Form eine beliebige Taste z.B. Button4 lösche / ausschneide.
    verschwindet bei Button4 das Handles
    Einige Vorredner haben das Problem ja schon beschrieben dass das so ist wenn man eine Taste löscht.

    Aber bei myButtonverschwindet ebenfalls das Handles

    MfG DocHoff
    Dateien
    • myProjekt.zip

      (208,32 kB, 4 mal heruntergeladen, zuletzt: )

    Neu

    @DocHoff Deine Datei scheint beschädigt.
    Lade sie bitte noch mal hoch.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    Das Projekt funktioniert bei mir. Und ich kann den Fehler nun reproduzieren. Ich sehe, dass es am eigestellten Framework liegt: .NET 5.0
    Im .NET-FW 4.7 passiert das nicht. Das ist ein Fehler im Visual Studio.

    ##########

    Es passiert auch, wenn man im Designer ein Control hinzufügt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Neu

    Ok, gute Idee mal die Version zu ändern, hab ich nicht dran gedacht :sleeping:

    Aber was wäre die Lösung, mit 4.7 weitermachen?
    Handles...mit Hand ständig nachtragen?

    Hab mich noch nie damit befasst, kann man so nen Bug auch irgendwo melden?
    Zwecks Nachbesserung.

    MfG DocHoff

    Neu

    DocHoff schrieb:

    Handles...mit Hand ständig nachtragen?
    Klicke im Designer auf das Control und selektiere bei Ereignisse|Events die richtige Prozedur.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    DocHoff schrieb:

    kann man so nen Bug auch irgendwo melden?
    Jup, bei Mikrosaft. Hab ich selber schon gemacht ;)
    Und ist auch in Bearbeitung: developercommunity.visualstudi…d1-65a0-879b-df86a100d216
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.