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:
Nun die Antwort:
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.
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
- Public Class Form1
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- End Sub
- Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
- End Sub
- 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.