Exception beim Aktivieren der DoubleBuffered Eigenschaft
- VB.NET
- .NET (FX) 4.0
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.
-
-
こんにちわ
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:
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~ -
-
-
@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? -
-
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
- Informationen über das Aufrufen von JIT-Debuggen
- anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.
- ************** Ausnahmetext **************
- System.ArgumentException: Ungültiger Parameter.
- bei System.Drawing.Graphics.GetHdc()
- bei System.Drawing.BufferedGraphics.RenderInternal(HandleRef refTargetDC, BufferedGraphics buffer)
- bei System.Drawing.BufferedGraphics.Render()
- bei System.Windows.Forms.Control.WmPaint(Message& m)
- bei System.Windows.Forms.Control.WndProc(Message& m)
- bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
- ************** Geladene Assemblys **************
- mscorlib
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll.
- ----------------------------------------
- RControls
- Assembly-Version: 1.0.0.0.
- Win32-Version: 1.0.0.0.
- CodeBase: file:///C:/Users/Martin/documents/visual studio 2013/Projects/RControls/RControls/bin/Debug/RControls.exe.
- ----------------------------------------
- Microsoft.VisualBasic
- Assembly-Version: 10.0.0.0.
- Win32-Version: 14.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
- ----------------------------------------
- System
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
- ----------------------------------------
- System.Core
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
- ----------------------------------------
- System.Windows.Forms
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
- ----------------------------------------
- System.Drawing
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
- ----------------------------------------
- System.Configuration
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
- ----------------------------------------
- System.Xml
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
- ----------------------------------------
- System.Runtime.Remoting
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
- ----------------------------------------
- System.Drawing.resources
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing.resources/v4.0_4.0.0.0_de_b03f5f7f11d50a3a/System.Drawing.resources.dll.
- ----------------------------------------
- System.Windows.Forms.resources
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- 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.
- ----------------------------------------
- mscorlib.resources
- Assembly-Version: 4.0.0.0.
- Win32-Version: 4.6.1055.0 built by: NETFXREL2.
- CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
- ----------------------------------------
- ************** JIT-Debuggen **************
- Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
- Konfigurationsdatei der Anwendung oder des Computers
- (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
- Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.
- Zum Beispiel:
- <configuration>
- <system.windows.forms jitDebugging="true" />
- </configuration>
- Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
- Ausnahmen an den JIT-Debugger gesendet, der auf dem
- Computer registriert ist, und nicht in diesem Dialogfeld behandelt.
Stacktrace:
Quellcode
- 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
-
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:
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!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gather“ ()
-
Nimm dir für's nächste mal vielleicht vor, das zu schreiben. Ich ging jetzt davon aus, dass nur der genannte Code drin ist.
Viele Grüße
~blaze~Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()
-
Gather schrieb:
Ich habe das Graphics()-Objekt jetzt neu definiert
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. -
Gather schrieb:
Ja das war vermutlich zu geschwollen ausgedrückt.
Kannste mal den Code zeigen?
Weil meiner Vermutung nach ist der Verbesserungsbedürftig (kann mich auch irren). -
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
- Private _ColorLeft As Color = Color.FromArgb(244, 77, 165)
- Private _ColorRight As Color = Color.FromArgb(160, 22, 203)
- Private _ColorShadow As Color = Color.FromArgb(20, 0, 0, 0)
- Private _MouseState As MouseState = MouseState.None
- Private _TextHeadline As String = String.Empty
- Protected Overrides Sub OnPaint(e As PaintEventArgs)
- Dim g As Graphics = e.Graphics
- g.SmoothingMode = SmoothingMode.AntiAlias
- Using b As New LinearGradientBrush(New Point(2, Height), New Point(Width, 0), _ColorLeft, _ColorRight)
- Using p As GraphicsPath = RoundedRect(New Rectangle(2, 2, Width - 6, Height - 6), 5)
- g.FillPath(b, p)
- ' Dieser Abschnitt ist eigentlich eine eher schlechtere Variante um einen Hover bzw Pressed-Effekt zu erzeugen, aber für den Test hat es gereicht.
- ' Aber ich denke für die Code-Analyse sollte dies im Moment wenig Rolle spielen.
- If _MouseState = MouseState.Over Then g.FillPath(New SolidBrush(_ColorShadow), p)
- If _MouseState = MouseState.Down Then g.FillPath(New SolidBrush(Color.FromArgb(40, _ColorShadow.R, _ColorShadow.G, _ColorShadow.B)), p)
- Using SF As New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center}
- g.DrawString(_TextHeadline, Font, New SolidBrush(ForeColor), New Rectangle(22, 2, Width - 46, Height - 6), SF)
- End Using
- End Using
- End Using
- MyBase.OnPaint(e)
- End Sub
Was man alles davon hat wenn man einen dummen Fehler macht haha
-
Jo, sieht doch leidlich ok aus - meine Befürchtung, dass "neu definiert" bedeutet: "mit New instanziert" hat sich zum Glück nicht bestätigt.
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.
-
Benutzer online 1
1 Besucher
-
Tags
-
Ähnliche Themen
-
GirlOnFire - - Sonstige Problemstellungen
-
9 Benutzer haben hier geschrieben
- Gather (13)
- ~blaze~ (7)
- RodFromGermany (6)
- ErfinderDesRades (4)
- LuaX (2)
- VaporiZed (1)
- Fakiz (1)
- Bluespide (1)
- asusdk (1)