Visual Studio öffnet Designer Code

  • Allgemein

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von SanDiego.

    Visual Studio öffnet Designer Code

    Hallo,

    mein Problem habe ich bereits in einem anderen Forum geschildert und eine hilfreiche Antwort erhalten. Um mir das Tippen zu sparen zitiere ich einfach mal:



    SanDiego schrieb:

    Hallo zusammen,

    ich habe mir mal Visual Studio 2010 installiert. Bislang war ich nur mit Visual Basic 6.0 vertraut, somit ist die IDE als auch teilweise die Programmierung noch ziemliches Neuland für mich.

    Zum "Problem":

    Ich erstelle eine Windows-Form und füge Steuerelemente(folgend SE genannt) hinzu (label, textbox, etc.). Wie aus VB6 gewohnt führe ich einen Doppelklick auf das gewünschte SE hinzu und gelange so an die entsprechende Stelle im Quellcode. Das klappt auch; teilweise.

    Manchmal öffnet sich statt der quellcode Datei ein Tab was ***.designer.vb und packt dort dann die Prozedur von z.B. button1_click rein.

    Ich meine wirklich 'manchmal', weil ich da irgendwie noch kein Muster erkennen kann wann er das tut. Manchmal lande ich (richtigerweise!?) eben ganz normal in der Quellcode Datei.


    Meine Fragen lauten nun:

    Wann und wieso öffnet sich der Designercode bei bestimmten Ereignissen wie z.B. Doppelklick auf Steuerelement?

    Wofür ist der Designer Quellcode genau?

    Wenn ich das richtig sehe hält der den Code für die SE beisammen. Allerdings ist doch dann eine Prozedur wie ein Klickereignis dort völlig fehl am Platz, oder nicht?


    Die Fragen mögen bei einigen Facepalms auslösen, aber ich zerbreche an solchen Dingen, wenn ich nicht weiß, wieso jetzt was passiert und was dort passiert etc. :frown:


    Wenn mir jemand die Fragen erläutern kann bitte so ausführlich wie möglich.



    Danke und Gruß :smile:




    Nun die Antwort:


    floxx schrieb:

    Gleich vorweg: Deine Kernfrage (warum bei dir Message-Handler offenbar manchmal in der *.designer.vb erzeugt werden) kann ich leider nicht beantworten. Es handelt sich evtl. um einen Bug.



    Dort befindet sich der Code, der das jeweilige Fenster/UserControl/... erzeugt.
    Wenn Du ein Steuerelement über den Designer hinzufügst, wird es dort deklariert und initialisiert.

    Du ziehst z.B. einen Button von der Toolbox in ein Fenster und in der *.designer.vb erscheint


    Mit dem gleichen Code könntest du auch selbst einen Button per Code erzeugen und zum Fenster hinzufügen.

    Beim Doppelklick auf ein Steuerelement wird der Handler für das jeweilige Standard-Event erzeugt (bei Buttons Click, bei Komboboxen SelectedIndexChanged, bei Fenstern Load etc.).
    Sollte der entsprechende Handler bereits existieren, wird die Datei geöffnet und der Cursor dort positioniert. Dies ist auch die Datei, in die du deinen Handler-Code schreibst (Standard bei Fenstern: Form*.vb).

    Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. End Sub
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. End Sub
    6. Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    7. End Sub
    8. End Class




    Richtig, in der vom Designer generierten *.designer.vb hat eigener Code nichts zu suchen.

    Die jeweilige Klasse ist in der *.designer.vb als partiell definiert:
    Partial Class Form1 ...
    So kann man den Quellcode einer Klasse auf mehrere Dateien aufteilen (in diesem Fall eben die Designer-Datei und die Datei für deinen Code).
    Ein anderes Beispiel für eine solche Aufteilung wäre der Einsatz des Entity-Frameworks. Dort werden einerseits Dateien für den Datenbankzugriff von einem Designer generiert, andererseits kann man das Verhalten der Klassen dank partieller Klassen und partieller Methoden in einer eigenen Datei anpassen bzw. die Klassen dort "von Hand" erweitern.

    --

    Das hier habe ich noch gefunden:

    Hier geht es um dein Problem (wenn auch mit VB 2005), aber eine richtige Lösung bzw. einen Grund für das Fehlverhalten sehe ich nicht:
    Code in Form1.vb or Form1.Designer.vb

    Ein Bug-Report (geschlossen als "nicht lösbar"):
    Code being inserted into Designer.vb | Microsoft Connect

    Wenn sich das Problem nicht lösen lässt und du Windows 7 oder höher verwendest, probiere doch mal VS 2012 aus (Desktopvariante bei Express).




    Was habe ich unternommen?
    Ich habe mir Visual Studio 2012 Professional installiert. Der Bug tritt dort tatsächlich wieder auf. Das bringt mich echt zum verzweifeln. Ich will alles ausprobiert haben bevor ich die Programmiersprache wechseln muss oder sonstwas, also frage ich hier nochmal nach, ob nicht doch jemand eine Lösung dafür hat.


    :(

    SanDiego schrieb:

    Der Bug tritt dort tatsächlich wieder auf.
    Versuchst du, ein neues Projekt zu erstellen oder versuchst du, das alte wieder zu öffnen?
    Was passiert, wenn du ein WPF-Projekt erstellst? Da gibt es ja keinen Designer-Code im alten Sinn, d.h. das könnte eigentlich nicht vermischt werden.

    BjöNi schrieb:

    Was passiert, wenn du ein WPF-Projekt erstellst? Da gibt es ja keinen Designer-Code im alten Sinn, d.h. das könnte eigentlich nicht vermischt werden.


    Was genau ist ein WPF Projekt?

    Habe mal zum Test eines erstellt und dort konnte ich den Fehler nicht feststellen.

    Allerdings glaube ich, dass ich auf ein WPF Projekt nicht zurückgreifen kann, um mein Vorhaben zu realisieren, soweit ich das jetzt recherchieren konnte. :(
    WPF ist sogesagt eine weiterentwicklung der Windows Forms Anwendung, eigentlich kann man sagen sie ist die Zukunft der .Net entwicklung.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    WPF ist sozusagen eine neue Generation von VB.NET und wird wohl über kurz oder lang WinForms ablösen. Der Code wird weiterhin in VB.NET geschrieben, der Designer-Code allerdings in XML, was sich dafür wesentlich besser dafür eignet. Ich bezweifle stark, dass dein Vorhaben zwar in WinForms, nicht aber in WPF umsetzbar ist. Vl. Schilderst du es uns einfach mal kurz.
    Klingt spannend ;)

    Okay, also mein Vorhaben mal kurz geschildet.

    Ich möchte künftig auf zwei Datenbanken zugreifen. Eine lokale MSSQL DB und eine MYSQL im Web. Ob die MYSQL Verbindung direkt hergestellt wird, oder Daten nur zu definierten Zeiten hochgeschoben werden weiß ich noch nicht (Thema Sicherheit).

    SanDiego schrieb:

    Schade, dass es für das Forms Problem wohl keine Lösung gibt.
    Nein, eigentlich nicht. Ein Grund von sowieso schon einigen, umzusteigen. Und wenn es mit WinForms funktionieren würde, müsste man erst wieder unzählige Argumente zusammensuchen, warum du auf WPF umsteigen solltest ;)

    BjöNi schrieb:

    SanDiego schrieb:

    Schade, dass es für das Forms Problem wohl keine Lösung gibt.
    Nein, eigentlich nicht. Ein Grund von sowieso schon einigen, umzusteigen. Und wenn es mit WinForms funktionieren würde, müsste man erst wieder unzählige Argumente zusammensuchen, warum du auf WPF umsteigen solltest ;)


    Na gut, so kann mans auch sehen. :D Ich hoffe es bestätigt auf lang die Erwartungen die ich jetzt habe, nachdem das hier so angepriesen wurde :P