Exception beim Aktivieren der DoubleBuffered Eigenschaft

  • VB.NET
  • .NET (FX) 4.0

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Hallo, bin kein Experte aber vlt.

    VB.NET-Quellcode

    1. MyBase.SetStyle(...)

    Anstatt

    VB.NET-Quellcode

    1. SetStyle(....)


    Naja ein Versuch ist es wert.
    Und sorry, BBCodes gehen mobil irgendwie nicht
    Grüße,
    Luca

    Edit: BBCodes hinzugefügt.
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.

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

    MyBase.SetStyle und SetStyle verweisen auf den gleichen Member. Der Unterschied ist, dass du innerhalb von einer Überschreibung einer Methode über MyBase den überschriebenen Member aufrufen kannst:

    VB.NET-Quellcode

    1. Public Overrides Sub X() 'X wurde auf der Basisklasse ebenfalls definiert, dort mit Overridable
    2. MyBase.X() 'Rufe X der Basisklasse auf


    Teilweise wird es außerdem angegeben, um klarzustellen, dass bereits der Basistyp diese Methode zur Verfügung stellt.

    BBCodes kannst du auch mobil eintippen, indem du einfach [bbcode][/bbcode] schreibst, wobei du bbcode durch den entsprechenden Code ersetzt, also bspw. für VB.Net [vbnet][/vbnet] oder für C# [cs][/cs].

    Viele Grüße
    ~blaze~
    Mh oh ... ok .... merke ich mir

    Grüße
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    @Fakiz nein. Ist doch nur ein simpler Test.

    ~blaze~ schrieb:

    Lass UpdateStyles vielleicht einfach mal weg.

    Kommt trotzdem der Fehler. Er tritt genau beim SetStyle (bzw. DoubleBuffered = True) auf. UpdateStyle() alleine funktioniert.
    Und wie genau kann ich den StackTrace ausgeben?
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Try Catch fängt das ganze nicht ab..
    Dennoch alles was ich bis jetzt weiß ist, dass anscheinend die .pdb Datei für die System.Drawing.dll fehlt, aber ich keine Idee hätte wie ich diese ersetzen könnte.
    Plus diese Fehlermeldung:
    Spoiler anzeigen

    Brainfuck-Quellcode

    1. Informationen über das Aufrufen von JIT-Debuggen
    2. anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.
    3. ************** Ausnahmetext **************
    4. System.ArgumentException: Ungültiger Parameter.
    5. bei System.Drawing.Graphics.GetHdc()
    6. bei System.Drawing.BufferedGraphics.RenderInternal(HandleRef refTargetDC, BufferedGraphics buffer)
    7. bei System.Drawing.BufferedGraphics.Render()
    8. bei System.Windows.Forms.Control.WmPaint(Message& m)
    9. bei System.Windows.Forms.Control.WndProc(Message& m)
    10. bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    11. ************** Geladene Assemblys **************
    12. mscorlib
    13. Assembly-Version: 4.0.0.0.
    14. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    15. CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll.
    16. ----------------------------------------
    17. RControls
    18. Assembly-Version: 1.0.0.0.
    19. Win32-Version: 1.0.0.0.
    20. CodeBase: file:///C:/Users/Martin/documents/visual studio 2013/Projects/RControls/RControls/bin/Debug/RControls.exe.
    21. ----------------------------------------
    22. Microsoft.VisualBasic
    23. Assembly-Version: 10.0.0.0.
    24. Win32-Version: 14.6.1055.0 built by: NETFXREL2.
    25. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
    26. ----------------------------------------
    27. System
    28. Assembly-Version: 4.0.0.0.
    29. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    30. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
    31. ----------------------------------------
    32. System.Core
    33. Assembly-Version: 4.0.0.0.
    34. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    35. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
    36. ----------------------------------------
    37. System.Windows.Forms
    38. Assembly-Version: 4.0.0.0.
    39. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    40. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
    41. ----------------------------------------
    42. System.Drawing
    43. Assembly-Version: 4.0.0.0.
    44. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    45. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
    46. ----------------------------------------
    47. System.Configuration
    48. Assembly-Version: 4.0.0.0.
    49. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    50. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
    51. ----------------------------------------
    52. System.Xml
    53. Assembly-Version: 4.0.0.0.
    54. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    55. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
    56. ----------------------------------------
    57. System.Runtime.Remoting
    58. Assembly-Version: 4.0.0.0.
    59. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    60. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
    61. ----------------------------------------
    62. System.Drawing.resources
    63. Assembly-Version: 4.0.0.0.
    64. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    65. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing.resources/v4.0_4.0.0.0_de_b03f5f7f11d50a3a/System.Drawing.resources.dll.
    66. ----------------------------------------
    67. System.Windows.Forms.resources
    68. Assembly-Version: 4.0.0.0.
    69. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    70. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
    71. ----------------------------------------
    72. mscorlib.resources
    73. Assembly-Version: 4.0.0.0.
    74. Win32-Version: 4.6.1055.0 built by: NETFXREL2.
    75. CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
    76. ----------------------------------------
    77. ************** JIT-Debuggen **************
    78. Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
    79. Konfigurationsdatei der Anwendung oder des Computers
    80. (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
    81. Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.
    82. Zum Beispiel:
    83. <configuration>
    84. <system.windows.forms jitDebugging="true" />
    85. </configuration>
    86. Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
    87. Ausnahmen an den JIT-Debugger gesendet, der auf dem
    88. Computer registriert ist, und nicht in diesem Dialogfeld behandelt.


    Stacktrace:

    Quellcode

    1. StackTrace " bei System.Drawing.Graphics.GetHdc()\r\n bei System.Drawing.BufferedGraphics.RenderInternal(HandleRef refTargetDC, BufferedGraphics buffer)\r\n bei System.Drawing.BufferedGraphics.Render()\r\n bei System.Windows.Forms.Control.WmPaint(Message& m)\r\n bei System.Windows.Forms.Control.WndProc(Message& m)\r\n bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)" string
    Bilder
    • disassembly.PNG

      71,55 kB, 1.686×887, 108 mal angesehen
    • exception window.PNG

      62,67 kB, 1.682×685, 106 mal angesehen
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Die Nachricht tritt also nicht in SetStyle auf. Vermutlich kann sie daher auch nicht abgefangen werden. Warum BufferedGraphics einen Fehler wirft, kann ich allerdings so nicht sagen.
    Ich würde jetzt die WndProc-Methode überschreiben und dort den Fehler abfangen. Anschließend würde ich dort mal den letzten Win32-Error zurückgeben:

    VB.NET-Quellcode

    1. GetExceptionForHR(Marshal.GetHRForLastWin32Error())

    Wenn du das machst, wird mehr Information preisgegeben?
    Was passiert außerdem, wenn du manuell GetHdc aufrufst?
    Die .pdb fehlt? Da müsstest du dann wohl mal schauen, dass du das FW richtig installiert bekommst.

    An sich ist das meines Erachtens ein äußerst untypisches Verhalten.

    Viele Grüße
    ~blaze~
    Es dürfte ziemlich sicher etwas mit meiner Windows Installtion zu tun haben.
    Folgendes habe ich gefunden:
    social.msdn.microsoft.com/Foru…hicsgethdc?forum=winforms
    stackoverflow.com/questions/38…g-graphics-gethdc-only-on
    Grundsätzlich verstehe ich es aber nicht, da ich .NEt Framework 4.6.1 installiert habe.

    Und ich muss zugeben, mit dem genannten Lösungvorschlag kenne ich mich nicht aus.
    Zu deiner Idee? Hast du diesbezüglich Anregungen wie ich das anstellen könnte?


    EDIT://
    Problem gelöst!
    Im Nachhinein, hätte die OnPaint() Sub uns wahrscheinlich viel Arbeit erspart.
    Das Problem war folgendes: Ich hatte in der OnPaint()-Sub folgendes eingebaut: Using g as Graphics = e.graphics() Natürlich kann dies gar nicht funktionieren..
    Ich habe das Graphics()-Objekt jetzt neu definiert und alles läuft wieder wie gehabt

    Danke an alle die dennoch hier ihr Bestes gegeben haben!

    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


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

    Gather schrieb:

    Ich habe das Graphics()-Objekt jetzt neu definiert
    Was immer du damit meinst (ich habe eine Vermutung) - jdfs das ist nicht im Sinne des Erfinders.
    Im OnPaint soll man kein Graphics neu definieren oder sowas, sondern man soll das Graphics nehmen, was einem die PaintEventArgs liefern, und das benutzen. Kein anderes.
    Und Benutzen - nicht disposen! (also kein UsingBlock)
    Ja das war vermutlich zu geschwollen ausgedrückt. @ErfinderDesRades
    @~blaze~ ich dachte auch, dass es nur daran lag, aufgrund der neuen Installation etc. Aber ja, peinlicher Fehler, aber man lernt draus.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Mein Problem ist zwar schon gelöst, aber warum nicht. Simples TestControl, dient grundsätzlich keinem Zweck (vorerst).
    Wobei die Mouse-Hook jetzt nicht dabei ist.

    @ErfinderDesRades

    VB.NET-Quellcode

    1. Private _ColorLeft As Color = Color.FromArgb(244, 77, 165)
    2. Private _ColorRight As Color = Color.FromArgb(160, 22, 203)
    3. Private _ColorShadow As Color = Color.FromArgb(20, 0, 0, 0)
    4. Private _MouseState As MouseState = MouseState.None
    5. Private _TextHeadline As String = String.Empty
    6. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    7. Dim g As Graphics = e.Graphics
    8. g.SmoothingMode = SmoothingMode.AntiAlias
    9. Using b As New LinearGradientBrush(New Point(2, Height), New Point(Width, 0), _ColorLeft, _ColorRight)
    10. Using p As GraphicsPath = RoundedRect(New Rectangle(2, 2, Width - 6, Height - 6), 5)
    11. g.FillPath(b, p)
    12. ' Dieser Abschnitt ist eigentlich eine eher schlechtere Variante um einen Hover bzw Pressed-Effekt zu erzeugen, aber für den Test hat es gereicht.
    13. ' Aber ich denke für die Code-Analyse sollte dies im Moment wenig Rolle spielen.
    14. If _MouseState = MouseState.Over Then g.FillPath(New SolidBrush(_ColorShadow), p)
    15. If _MouseState = MouseState.Down Then g.FillPath(New SolidBrush(Color.FromArgb(40, _ColorShadow.R, _ColorShadow.G, _ColorShadow.B)), p)
    16. Using SF As New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center}
    17. g.DrawString(_TextHeadline, Font, New SolidBrush(ForeColor), New Rectangle(22, 2, Width - 46, Height - 6), SF)
    18. End Using
    19. End Using
    20. End Using
    21. MyBase.OnPaint(e)
    22. End Sub


    Was man alles davon hat wenn man einen dummen Fehler macht haha
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Jo, sieht doch leidlich ok aus - meine Befürchtung, dass "neu definiert" bedeutet: "mit New instanziert" hat sich zum Glück nicht bestätigt. :thumbsup:

    Kleine Verbesserung wäre noch, wenn du die Brushes ebenfalls als Private deklarierst, und wiederverwendest, anstatt bei jedem Paint neue zu erzeugen und nicht zu disposen.