InitializeComponent() vom Designer erstellt ruft ArgumentException auf (VB 6 to .Net Upgrade Projekt)

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Roro.

    InitializeComponent() vom Designer erstellt ruft ArgumentException auf (VB 6 to .Net Upgrade Projekt)

    Hallo,

    ich upgrade für meine Studienarbeit ein Vb6 Projekt zu einem Vb.Net Projekt. Bis jetzt habe ich alle Runtime Errors beseitigt und kann das Programm debuggen. Allerdings kommt nach einigen Sekunden sofort die Fehlermeldung:

    VB.NET-Quellcode

    1. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    2. Partial Class frmBeschaffungProduktionStrom
    3. #Region "Upgrade Support "
    4. Private Shared m_vb6FormDefInstance As frmBeschaffungProduktionStrom
    5. Private Shared m_InitializingDefInstance As Boolean
    6. Public Shared Property DefInstance() As frmBeschaffungProduktionStrom
    7. Get
    8. If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
    9. m_InitializingDefInstance = True
    10. m_vb6FormDefInstance = New frmBeschaffungProduktionStrom()
    11. m_InitializingDefInstance = False
    12. End If
    13. Return m_vb6FormDefInstance
    14. End Get
    15. Set
    16. m_vb6FormDefInstance = Value
    17. End Set
    18. End Property
    19. #End Region
    20. #Region "Windows Form Designer generated code "
    21. Public Sub New()
    22. MyBase.New()
    23. If m_vb6FormDefInstance Is Nothing Then
    24. If m_InitializingDefInstance Then
    25. m_vb6FormDefInstance = Me
    26. Else
    27. Try
    28. 'For the start-up form, the first instance created is the default instance.
    29. If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then
    30. m_vb6FormDefInstance = Me
    31. End If
    32. Catch
    33. End Try
    34. End If
    35. End If
    36. 'This call is required by the Windows Form Designer.
    37. 'TODO: nächste 2 Zeilen auskommentieren?
    38. InitializeComponent()
    39. ListViewKW_InitializeColumnKeys()
    40. 'This form is an MDI child.
    41. 'This code simulates the VB6
    42. ' functionality of automatically
    43. ' loading and showing an MDI
    44. ' child's parent.
    45. Me.MdiParent = Newag2001.MDIfrmStart.DefInstance
    46. Newag2001.MDIfrmStart.DefInstance.Show()
    47. 'The MDI form in the VB6 project had its
    48. 'AutoShowChildren property set to True
    49. 'To simulate the VB6 behavior, we need to
    50. 'automatically Show the form whenever it
    51. 'is loaded. If you do not want this behavior
    52. 'then delete the following line of code
    53. 'UPGRADE_TODO: (2018) Remove the next line of code to stop form from automatically showing. More Information: http://www.vbtonet.com/ewis/ewi2018.aspx
    54. Me.Show()
    55. End Sub


    Bei InitializeComponent() tritt der Fehler auf: ArgumentException wurde nicht behandelt. Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.
    Ich habe die Zeile dann mal auskommentiert. Dadurch treten aber einige andere Fehler auf bei denen ich gelesen habe, dass Sie durch InitializeComponent behoben werden. Also versteh ich nicht wieso der Upgrade Wizard dieses InitializeComponent im Designer einbaut und das dann ein Fehler hervorruft?!

    mfg,
    Roman
    InitializeComponent brauchst du für jedes Control, dazu gehören auch Formulare, nur sind die meist in einer .Designer.vb Datei versteckt...um mal zu erfahren wo der Fehler auftritt solltest du das Programm mit F11 Starten und immer wieder F11 drücken, bis zu der Zeile, in welcher schließlich der Fehler kommt...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Danke für die schnelle Antwort. F8 oder F11 macht bei mir keinen Unterschied ;)

    Also das ist der letzte Befehl der ausgeführt wird bevor der Fehler auftritt. Visual Basic 2010 Express teilt mir dann auch gleichzeitig mit dass ein Schritt übersprungen wurde und ich das ausstellen könnte wenn ich im Kontextmenue Einzelschritt in Angabe ausführen würde. Diese Option finde ich leider nicht. Hier ein Screenshot vom Hinweis den ich kurz vor dem Fehler bekomme.


    Wenn ich allerdings zurücknavigiere sehe ich, dass dieser Code als letztes ausgeführt werden soll:

    VB.NET-Quellcode

    1. 'Formular Spielen aufrufen
    2. frmTree.DefInstance.Show()
    3. frmSpielen.DefInstance.Show()

    Der TreeView wird auch nicht richtig angezeigt, hier wird also der Fehler liegen. In der Definition von DefInstance finde ich:

    VB.NET-Quellcode

    1. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    2. Partial Class frmTree
    3. #Region "Upgrade Support "
    4. Private Shared m_vb6FormDefInstance As frmTree
    5. Private Shared m_InitializingDefInstance As Boolean
    6. Public Shared Property DefInstance() As frmTree
    7. Get
    8. If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
    9. m_InitializingDefInstance = True
    10. m_vb6FormDefInstance = New frmTree()
    11. m_InitializingDefInstance = False
    12. End If
    13. Return m_vb6FormDefInstance
    14. End Get
    15. Set
    16. m_vb6FormDefInstance = Value
    17. End Set
    18. End Property
    19. #End Region
    20. #Region "Windows Form Designer generated code "
    21. Public Sub New()
    22. MyBase.New()
    23. If m_vb6FormDefInstance Is Nothing Then
    24. If m_InitializingDefInstance Then
    25. m_vb6FormDefInstance = Me
    26. Else
    27. Try
    28. 'For the start-up form, the first instance created is the default instance.
    29. If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then
    30. m_vb6FormDefInstance = Me
    31. End If
    32. Catch
    33. End Try
    34. End If
    35. End If
    36. 'This call is required by the Windows Form Designer.
    37. InitializeComponent()
    38. 'This form is an MDI child.
    39. 'This code simulates the VB6
    40. ' functionality of automatically
    41. ' loading and showing an MDI
    42. ' child's parent.
    43. Me.MdiParent = Newag2001.MDIfrmStart.DefInstance
    44. Newag2001.MDIfrmStart.DefInstance.Show()
    45. 'The MDI form in the VB6 project had its
    46. 'AutoShowChildren property set to True
    47. 'To simulate the VB6 behavior, we need to
    48. 'automatically Show the form whenever it
    49. 'is loaded. If you do not want this behavior
    50. 'then delete the following line of code
    51. 'UPGRADE_TODO: (2018) Remove the next line of code to stop form from automatically showing. More Information: http://www.vbtonet.com/ewis/ewi2018.aspx
    52. Me.Show()
    53. End Sub


    Und das ist ja eigentlich genau der gleiche Code der beim Designer steht. Überschneidet sich das oder so? In beiden Codes steht InitializeComponent.

    mfg,
    Roman
    VIelleicht könnt Ihr mir auch noch bei einem anderen Problem helfen. Wenn ich (nachdem das Programm durch debug gestartet wurde) ein anderes Ereignis ausführen will wird diese Fehlermeldung angezeigt:

    VB.NET-Quellcode

    1. frmSpielen.DefInstance.Close()

    InvalidOperationException wurde nicht behandelt. Der Wert Close() kann nicht während der Ausführung von CreateHandle() aufgerufen werden.

    CreateHandle steht aber in keiner Stelle im ganzen Projekt!? Was ist das für ein Befehl?
    DefINstance liefert dir das Formular zurück, sofern dies bereits in der Variable steht, andernfalls liefert es dir ein neues Objekt zurück(New), genau dies passiert hier, und du kannst nichts schließen/benutzen, was noch nich vollständig erstellt wurde...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ok, danke, ich habe DefInstance weggenommen und der Fehler tritt nicht mehr auf!
    Allerdings nochmal zu dem anfänglichen Problem:
    InitializeComponent() habe ich auch auskommentiert und bekomme nun einen andere Fehler. Ich hatte vorher überhaupt keine Probleme mit den Fehlern weil Sie alle Array oder falsch übernommene Variablen waren usw.
    Allerdings sind diese Fehler jetzt alle im Designer und in dem vom Upgrader selbst erstellten Code. Das verstehe ich absolut nicht:

    VB.NET-Quellcode

    1. Sub ListViewKW_InitializeColumnKeys()
    2. Me._ListViewKW_ColumnHeader_1.Name = ""
    3. Me._ListViewKW_ColumnHeader_2.Name = ""
    4. Me._ListViewKW_ColumnHeader_3.Name = ""
    5. Me._ListViewKW_ColumnHeader_4.Name = ""
    6. Me._ListViewKW_ColumnHeader_5.Name = ""
    7. End Sub
    8. #End Region


    Fehler: NullReferenceException wurde nicht von Benutzercode behandelt. Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    If m_vb6FormDefInstance Is Nothing Then
    If m_InitializingDefInstance Then
    m_vb6FormDefInstance = Me
    Else
    Try
    'For the start-up form, the first instance created is the default instance.
    If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then
    m_vb6FormDefInstance = Me
    End If

    Catch
    End Try
    End If
    End If

    das mal wegmachen...InitializeComponent benötigst du jedoch weiterhin(der Fehler ist hier klar), ansonsten gibt es keine Controls...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    mh ok, wenn ich das wegmache bekomme ich 20 neue Fehler dass alle möglichen Befehle(AcceptrsReturn, MaxLength, ReadOnly, TextAlign) "ist kein Member von System.Windows.Forms.Control"

    EDIT: Die Deklaration PUBLIC von den Controls war einfach mal als Publc falsch geschrieben. Klasse.

    InitializeComponent() wirft aber immernoch den gleichen Fehler aus wenn ich das andere auskommentiere. Und wenn ich IniCom auskommentiere kommt der ListView Fehler. Es ist ein Teufelskreis...

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

    Der Inhalt?
    Das hier ist das Sub:

    VB.NET-Quellcode

    1. Private Sub InitializeComponent()
    2. Me.components = New System.ComponentModel.Container()
    3. Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmBeschaffungProduktionStrom))
    4. Me.ToolTipMain = New System.Windows.Forms.ToolTip(Me.components)
    5. Me.ListViewKW = New System.Windows.Forms.ListView()
    6. Me._ListViewKW_ColumnHeader_1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    7. Me._ListViewKW_ColumnHeader_2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    8. Me._ListViewKW_ColumnHeader_3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    9. Me._ListViewKW_ColumnHeader_4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    10. Me._ListViewKW_ColumnHeader_5 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    11. Me.txtLeistungGesamt = New System.Windows.Forms.TextBox()
    12. Me.txtEinspeisungGesamt = New System.Windows.Forms.TextBox()
    13. Me.txtPeriode = New System.Windows.Forms.TextBox()
    14. Me.cmdWeiterC12 = New System.Windows.Forms.Button()
    15. Me.lblVerfuegbarkeit = New System.Windows.Forms.Label()
    16. Me.lblBenutzungsdauer = New System.Windows.Forms.Label()
    17. Me.lblLeistung = New System.Windows.Forms.Label()
    18. Me.lblEinspeisung = New System.Windows.Forms.Label()
    19. Me.Label12 = New System.Windows.Forms.Label()
    20. Me.Line2 = New System.Windows.Forms.Label()
    21. Me.Label7 = New System.Windows.Forms.Label()
    22. Me.lblÜberschriftC11 = New System.Windows.Forms.Label()
    23. Me.commandButtonHelper1 = New Artinsoft.VB6.Gui.CommandButtonHelper(Me.components)
    24. CType(Me.commandButtonHelper1, System.ComponentModel.ISupportInitialize).BeginInit()
    25. Me.SuspendLayout()
    Das hatte ich auch zuerst vor. Es sind allerdings "Total VB6 Effective Lines: 21.562 (code + design)". Das ist ziemlich viel. Ich hab das Projekt nirgendwo hochgeladen, könnte es aber tun falls sich jemand damit tiefer beschäftigen möchte ;).

    EDIT:
    Was ich eigentlich schreiben wollte:
    Wenn ich von dem Designer Code der Form in den wirklichen Design Modus wechseln will, bekomme ich diese Meldung.



    Damit kann ich auch leider nicht viel anfangen. Diese Instanzen existieren nicht in meinem Projekt.

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

    Ich habe jetzt den Fehler mehr oder weniger isoliert:

    Me.commandButtonHelper1.SetMaskColor(Me.cmdWeiterC11, System.Drawing.Color.Silver)

    Dieser commandButtonHelper1 ist ein vom Upgradeprogramm erstellter Befehl. Allerdings kann ich damit nicht viel anfangen und er ist in allen meinen Design Forms enthalten. Wenn ich alle Codezeilen mit diesem Befehl auskommentiere kann ich debuggen und alles. Allerdings sobald ich auch nur einen Pixel in meiner Design Form ändere wird der Code regeneriert und ich hab wieder das anfangs Problem.
    Meine Frage: Kennt sich irgendjemand mit diesem commandButtonHelper1 Befehl aus?

    VB.NET-Quellcode

    1. Public Class CommandButtonHelper
    2. Inherits System.ComponentModel.Component
    3. Member von Artinsoft.VB6.Gui
    4. Zusammenfassung:
    5. Extender Provider for handling CommandButton properties which are not present in .NET buttons.
    6. 'INSBESONDERE:
    7. Public Function GetMaskColor(ByVal button As System.Windows.Forms.Button) As System.Drawing.Color
    8. Member von Artinsoft.VB6.Gui.CommandButtonHelper
    9. Zusammenfassung:
    10. Instance - Gets the property MaskColor for the button.
    11. Parameter:
    12. button: The button.
    13. Rückgabewerte:
    14. The current MaskColor for this button.


    Wichtiger noch wäre mir zu wissen wo ich in meinem Code die Zeilen finden kann die genau das gleiche bewirken wie der Buttonhelper. Denn daran liegt es wohl dass in 2 meiner Forms diese InitializeComponent() Fehler auftreten.

    Es müsste hier also irgendwie einmal durch mich?! und einmal durch den Commandbuttonhelper die MaskColor gesetzt werden? Oder kann das noch woanders definiert sein? Also der Code für die anderen Button sieht eigentlich genau gleich aus aber da stürzt er nicht ab. Liegt es dann doch in der Form? Ich bin verwirrt. Hier also der Designer Code (nur die Subs in denen CommandButtonHelper1 vorkommt)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    2. Partial Class frmBeschaffungProduktionStrom
    3. #Region "Upgradeunterstützung "
    4. Private Shared m_vb6FormDefInstance As frmBeschaffungProduktionStrom
    5. Private Shared m_InitializingDefInstance As Boolean
    6. Public Shared Property DefInstance() As frmBeschaffungProduktionStrom
    7. Get
    8. If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
    9. m_InitializingDefInstance = True
    10. m_vb6FormDefInstance = New frmBeschaffungProduktionStrom()
    11. m_InitializingDefInstance = False
    12. End If
    13. Return m_vb6FormDefInstance
    14. End Get
    15. Set(ByVal value As frmBeschaffungProduktionStrom)
    16. m_vb6FormDefInstance = Value
    17. End Set
    18. End Property
    19. #End Region
    20. #Region "Windows Form-Designer - generierter Code "
    21. Public Sub New()
    22. MyBase.New()
    23. If m_vb6FormDefInstance Is Nothing Then
    24. If m_InitializingDefInstance Then
    25. m_vb6FormDefInstance = Me
    26. Else
    27. Try
    28. 'Für das Startformular ist die erste erstellte Instanz die Standardinstanz.
    29. If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then
    30. m_vb6FormDefInstance = Me
    31. End If
    32. Catch
    33. End Try
    34. End If
    35. End If
    36. 'Dieser Aufruf wird vom Windows Form-Designer benötigt.
    37. InitializeComponent()
    38. ListViewKW_InitializeColumnKeys()
    39. 'Dieses Formular ist ein untergeordnetes MDI-Element.
    40. 'Mit diesem Code wird VB6 simuliert.
    41. ' Funktion zum automatischen
    42. ' Laden und Anzeigen des übergeordneten Elements eines
    43. ' untergeordneten MDI-Elements.
    44. Me.MdiParent = Newag2001.MDIfrmStart.DefInstance
    45. Newag2001.MDIfrmStart.DefInstance.Show()
    46. 'Beim MDI-Formular im VB6-Projekt wurde
    47. 'Die AutoShowChildren-Eigenschaft wurde auf True festgelegt.
    48. 'Um das VB6-Verhalten zu simulieren, muss
    49. 'automatisch das Formular angezeigt werden, wenn es
    50. 'geladen wird. Wenn Sie dieses Verhalten nicht wünschen,
    51. 'löschen Sie die folgende Codezeile.
    52. 'UPGRADE_TODO: (2018) Entfernen Sie die nächste Codezeile, um das automatische Anzeigen des Codes zu verhindern. Weitere Informationen: http://www.vbtonet.com/ewis/ewi2018.aspx
    53. 'Me.Show()
    54. End Sub
    55. Private Sub ReleaseResources(ByVal eventSender As Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Closed
    56. Dispose(True)
    57. End Sub
    58. 'Verwerfen der Formularüberschreibungen zur Bereinigung der Komponentenliste.
    59. <System.Diagnostics.DebuggerNonUserCode()> _
    60. Protected Overloads Overrides Sub Dispose(ByVal Disposing As Boolean)
    61. If Disposing Then
    62. If Not (components Is Nothing) Then
    63. components.Dispose()
    64. End If
    65. End If
    66. MyBase.Dispose(Disposing)
    67. End Sub
    68. 'Erforderlich für Windows Form-Designer
    69. Private commandButtonHelper1 As Artinsoft.VB6.Gui.CommandButtonHelper
    70. 'HINWEIS: Die folgende Prozedur wird vom Windows Form-Designer benötigt.
    71. 'Änderungen können mit dem Windows Form-Designer vorgenommen werden.
    72. 'Nehmen Sie keine Änderungen mit dem Code-Editor vor.
    73. <System.Diagnostics.DebuggerStepThrough()> _
    74. Private Sub InitializeComponent()
    75. Me.cmdWeiterC12 = New System.Windows.Forms.Button()
    76. Me.commandButtonHelper1 = New Artinsoft.VB6.Gui.CommandButtonHelper(Me.components)
    77. CType(Me.commandButtonHelper1, System.ComponentModel.ISupportInitialize).BeginInit()
    78. Me.SuspendLayout()
    79. 'cmdWeiterC12
    80. '
    81. Me.cmdWeiterC12.BackColor = System.Drawing.SystemColors.Control
    82. 'Me.commandButtonHelper1.SetCorrectEventsBehavior(Me.cmdWeiterC12, True)
    83. Me.cmdWeiterC12.Cursor = System.Windows.Forms.Cursors.Default
    84. 'Me.commandButtonHelper1.SetDisabledPicture(Me.cmdWeiterC12, Nothing)
    85. 'Me.commandButtonHelper1.SetDownPicture(Me.cmdWeiterC12, Nothing)
    86. Me.cmdWeiterC12.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    87. Me.cmdWeiterC12.ForeColor = System.Drawing.SystemColors.ControlText
    88. Me.cmdWeiterC12.Image = CType(resources.GetObject("cmdWeiterC12.Image"), System.Drawing.Image)
    89. Me.cmdWeiterC12.Location = New System.Drawing.Point(448, 464)
    90. 'Me.commandButtonHelper1.SetMaskColor(Me.cmdWeiterC12, System.Drawing.Color.Silver)
    91. Me.cmdWeiterC12.Name = "cmdWeiterC12"
    92. Me.cmdWeiterC12.RightToLeft = System.Windows.Forms.RightToLeft.No
    93. Me.cmdWeiterC12.Size = New System.Drawing.Size(87, 31)
    94. 'Me.commandButtonHelper1.SetStyle(Me.cmdWeiterC12, 1)
    95. Me.cmdWeiterC12.TabIndex = 0
    96. Me.cmdWeiterC12.TextAlign = System.Drawing.ContentAlignment.BottomCenter
    97. Me.cmdWeiterC12.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText
    98. Me.cmdWeiterC12.UseVisualStyleBackColor = False
    99. 'frmBeschaffungProduktionStrom
    100. '
    101. Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
    102. Me.AutoScroll = True
    103. Me.BackColor = System.Drawing.SystemColors.Control
    104. Me.ClientSize = New System.Drawing.Size(559, 503)
    105. Me.Controls.Add(Me.ListViewKW)
    106. Me.Controls.Add(Me.txtLeistungGesamt)
    107. Me.Controls.Add(Me.txtEinspeisungGesamt)
    108. Me.Controls.Add(Me.txtPeriode)
    109. Me.Controls.Add(Me.cmdWeiterC12)
    110. Me.Controls.Add(Me.lblVerfuegbarkeit)
    111. Me.Controls.Add(Me.lblBenutzungsdauer)
    112. Me.Controls.Add(Me.lblLeistung)
    113. Me.Controls.Add(Me.lblEinspeisung)
    114. Me.Controls.Add(Me.Label12)
    115. Me.Controls.Add(Me.Line2)
    116. Me.Controls.Add(Me.Label7)
    117. Me.Controls.Add(Me.lblÜberschriftC11)
    118. Me.Cursor = System.Windows.Forms.Cursors.Default
    119. Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    120. Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
    121. Me.Location = New System.Drawing.Point(0, -1)
    122. Me.MaximizeBox = False
    123. Me.MinimizeBox = False
    124. Me.Name = "frmBeschaffungProduktionStrom"
    125. Me.RightToLeft = System.Windows.Forms.RightToLeft.No
    126. Me.ShowInTaskbar = False
    127. Me.StartPosition = System.Windows.Forms.FormStartPosition.Manual
    128. Me.Text = "Beschaffung / Produktion"
    129. CType(Me.commandButtonHelper1, System.ComponentModel.ISupportInitialize).EndInit()
    130. Me.ResumeLayout(False)
    131. Me.PerformLayout()
    132. End Sub
    133. #End Region
    134. End Class



    Und hier die Form:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict Off
    2. Option Explicit On
    3. Imports Artinsoft.VB6.Utils
    4. Imports System
    5. Imports System.Windows.Forms
    6. Partial Friend Class frmBeschaffungProduktionStrom
    7. Inherits System.Windows.Forms.Form
    8. Private Sub cmdWeiterC12_Click(ByVal eventSender As Object, ByVal eventArgs As EventArgs) Handles cmdWeiterC12.Click
    9. frmBeschaffungProduktionWaerme.DefInstance.Show()
    10. Me.Hide()
    11. End Sub
    12. 'UPGRADE_WARNING: (2080) Form_Load event wurde auf Form_Load event aktualisiert und weist ein neues Verhalten auf. Weitere Informationen: http://www.vbtonet.com/ewis/ewi2080.aspx
    13. Private Sub frmBeschaffungProduktionStrom_Load(ByVal eventSender As Object, ByVal eventArgs As EventArgs) Handles MyBase.Load
    14. Dim SummeLeistung As Object
    15. Dim LiItem As ListViewItem 'wird für die SubItems der ListView benötigt
    16. 'Formulargröße einstellen
    17. Me.Left = VB6.TwipsToPixelsX(3735)
    18. Me.Top = 0
    19. Me.Width = VB6.TwipsToPixelsX(VB6.PixelsToTwipsX(MDIfrmStart.DefInstance.Width) - VB6.PixelsToTwipsX(frmTree.DefInstance.Width) - 200)
    20. Me.Height = frmTree.DefInstance.Height
    21. 'den TreeView aktualisieren
    22. frmTree.DefInstance.TreeViewSpielen.SelectedNode = frmTree.DefInstance.TreeViewSpielen.Nodes.Item("D121")
    23. 'Werte in die Textfelder einstellen
    24. txtPeriode.Text = CStr(Periode - 1)
    25. 'Die WärmeKW's speisen auch Strom ein und werden daher mit aufgelistet
    26. 'TODO Alle Subitems 0 macht keinen Sinn?! Alles wird überschrieben, checken was da wirklich steht!
    27. For Lauf As Integer = 1 To AnzahlWaermeKW
    28. If WaermeKW(Lauf).EinspeisungStromGWH > 0 Then
    29. LiItem = ListViewKW.Items.Add(WaermeKW(Lauf).Name)
    30. LiItem.SubItems.Add(StringsHelper.Format(WaermeKW(Lauf).EinspeisungStromGWH / 1000, "#,##0"))
    31. LiItem.SubItems.Add(StringsHelper.Format(WaermeKW(Lauf).LeistungMW * WaermeKW(Lauf).Kopplungszahl / 100, "#,##0"))
    32. LiItem.SubItems.Add(StringsHelper.Format(WaermeKW(Lauf).Verfuegbarkeit / 100 * Periodenlänge, "#,##0"))
    33. LiItem.SubItems.Add(StringsHelper.Format(WaermeKW(Lauf).Verfuegbarkeit, "#,##0"))
    34. End If
    35. ' ***********************
    36. Next Lauf
    37. For Lauf As Integer = 1 To AnzahlKW
    38. ' Neu !!!!!!!!!!!!!!!
    39. If KWEinspeisung(Lauf) > 0 Then
    40. LiItem = ListViewKW.Items.Add(KWName(Lauf))
    41. LiItem.SubItems.Add(StringsHelper.Format(KWEinspeisung(Lauf) / 1000, "#,##0"))
    42. LiItem.SubItems.Add(StringsHelper.Format(KWLeistung(Lauf), "#,##0"))
    43. LiItem.SubItems.Add(StringsHelper.Format(KWVerfügbarkeiten(Periode - 1, Lauf) / 100 * Periodenlänge, "#,##0"))
    44. LiItem.SubItems.Add(StringsHelper.Format(KWVerfügbarkeiten(Periode - 1, Lauf), "#,##0"))
    45. End If
    46. ' ***********************
    47. Next Lauf
    48. LiItem = ListViewKW.Items.Add("Hilfsbezug")
    49. LiItem.SubItems.Add(StringsHelper.Format(GesamtHilfsbezug / 1000, "#,##0"))
    50. 'LiItem.SubItems(2) = Format(KWLeistung(Lauf), "#,##0")
    51. 'LiItem.SubItems(3) = Format(KWVerfügbarkeiten(Periode - 1, Lauf) / 100 * Periodenlänge, "#,##0")
    52. LiItem.SubItems.Add(StringsHelper.Format(100, "#,##0"))
    53. 'UPGRADE_WARNING: (1037) Die Standardeigenschaft von Objekt "SummeLeistung" konnte nicht aufgelöst werden. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1037.aspx
    54. SummeLeistung = 0
    55. For Lauf As Integer = 1 To AnzahlWaermeKW
    56. If WaermeKW(Lauf).Aktiv Then
    57. 'UPGRADE_WARNING: (1068) SummeLeistung vom Typ "Variant" wird für Double erzwungen. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1068.aspx
    58. 'UPGRADE_WARNING: (1037) Die Standardeigenschaft von Objekt "SummeLeistung" konnte nicht aufgelöst werden. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1037.aspx
    59. SummeLeistung = CDbl(SummeLeistung) + (WaermeKW(Lauf).LeistungMW * WaermeKW(Lauf).Kopplungszahl / 100)
    60. End If
    61. Next Lauf
    62. For Lauf As Integer = 1 To AnzahlKW
    63. If KWAktiv(Periode - 1, Lauf) Then
    64. 'UPGRADE_WARNING: (1068) SummeLeistung vom Typ "Variant" wird für Double erzwungen. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1068.aspx
    65. 'UPGRADE_WARNING: (1037) Die Standardeigenschaft von Objekt "SummeLeistung" konnte nicht aufgelöst werden. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1037.aspx
    66. SummeLeistung = CDbl(SummeLeistung) + KWLeistung(Lauf)
    67. End If
    68. Next Lauf
    69. 'UPGRADE_WARNING: (1068) SummeLeistung vom Typ "Variant" wird für Scalar erzwungen. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1068.aspx
    70. txtLeistungGesamt.Text = StringsHelper.Format(SummeLeistung, "#,##0")
    71. txtEinspeisungGesamt.Text = StringsHelper.Format((GesamtEinspeisung + GesamtHilfsbezug) / 1000, "#,##0")
    72. LiItem = Nothing
    73. End Sub
    74. Private Sub ListViewKW_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListViewKW.SelectedIndexChanged
    75. End Sub
    76. End Class
    Ein paar prinzipielle Bemerkungen zu den Fragen die du her gestellt hast:

    ArtinSoft ist eine Firma die sich (lt.Net) auf Migration von VB6 auf VB.NET spezialisiert hat und offensichtlich mit Microsoft für solche Fälle eine Partnerschaft eingegangen ist (siehe VBUC Link). D.h. Microsoft hat diesen Code wohl lizensiert und verwendet den Visual Basic Upgrade Companion (VBUC) für ihren Migration Wizard.

    Der von Dir erwähnte CommandButtonHelper ist so eine Helper Klasse, die offenbar VB6 Eigenschaften von Buttons in .NET nachbildet, unabhängig davon ob Du sie im Projekt-Code wirklich verwendest oder nicht. Du wirst vermutlich unter den Verweisen eine Referenz auf eine Artinsoft Library vorfinden. Diesen Code im Designer auszukommentieren bringt (wie Du schon gesagt hast) nichts, da Microsoft diese Helper Classes ziemlich eng mit dem Designer Host integriert hat :wacko:

    Der Code SetMaskColor ist so ein Beispiel: MaskColor ist eine Property von VB6 Buttons gewesen , mit der man eine Farbe festlegen konnte die zur Laufzeit diese Stelle transparent machte, wohl eher fraglich ob Du das in deinem Code überhaupt verwendest. In Net gibt es diese Property nicht (man kann die Funktion aber per GDI nachbilden).

    Um genauer zu wissen was genau in Deiner Designer.VB passiert kannst Du das Attribut <System.Diagnostics.DebuggerStepThrough()> _ vor InitializeComponents gezielt auskommentieren, dann geht der Debugger im Einzelschritt auch in diesen Code rein statt ihn zu überspringen.

    Was kannst Du also tun ? Meiner Meinung nach kannst Du entweder wie bisher versuchen den migrierten Code zum Laufen zu bekommen, wirst aber immer mit einem Zwitter von VB6 und .NET Code leben müssen. Das ist nicht nur jetzt sondern auch für die zukünftigen Erweiterungen eine ziemliche Erblast.

    Oder Du kannst den Code als reinen .NET Code schreiben, dafür müsstest Du aber wohl ein neues .NET Projekt anlegen und die Formen /Controls dort neu anlegen um nichts mehr mit dem Artinsoft VBUC zu tun zu haben. Auf Dauer ist das bestimmt auch das kleinere Übel. Wenn man die Bezeichnungen für die Formen / Buttons und andere Controls gleich wählt, kann man die Logik bestimmt auch weiter verwenden und die Arbeit wird vielleicht nicht ganz so gross.

    In Designer generiertem Code rumzupfuschen ist halt weder einfach noch sehr gesund.

    Ob Deine Studienprüfung den Umfang dieser Migration hergibt weiss ich natürlich nicht: nicht nur das Umschreiben des Codes, sondern gerade auch das Testen darf man hier nicht unterschätzen.
    Danke für die Einschätzung erstmal. Ich habe auch schon eine E-Mail an Artinsoft zu diesem Problem geschrieben. Ich hoffe ich erhalte im Laufe der Woche eine Antwort dazu. Das mit dem Zwitter ist natürlich eine schlechte Lösung, da mit dem Projekt weitergearbeitet werden soll. Die einzelnen VB6 Libraries und Umwandlungen einzeln zu konvertieren ist doch eine größere Aufgabe als vorher angenommen. Da das upgraden nur ein Teil der Arbeit sein sollte (1-2 Wochen, Freitag endet die 2te Woche) sieht es wohl so aus als wenn ich das zu meiner Hauptaufgabe machen sollte. Hast du oder jemand anderes evtl Erfahrung mit solchen Projekten und kann mir sagen wie lange das ungefähr dauern sollte? 21.000 Zeilen Code. Könnt Ihr wahrscheinlich garnicht sagen ohne das Programm zu sehen. Ich weiss leider nicht ob ich das einfach so veröffentlich darf, aber das alte (VB6) Spiel, das fertig ist und prima läuft könnt ihr natürlich gerne ausprobieren und angucken: dl.dropbox.com/u/8799243/Setup.zip