Benutzer mit den meisten Antworten
Bildschirminhalt speichern funktioniert nur einmal

Frage
-
Hallo Forum,
in einer Anwendung habe ich einen Bildschirminhalt, der breiter ist als die tatsächliche Ansicht.
Um diese Ansicht zu speichern, nutze ich folgenden Menü-Code:
Private Sub DruckenToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles DruckenToolStripMenuItem.Click Dim mp = Me.MainPanel Dim clientSize As Size = Me.ClientSize Dim bounds = Me.Bounds Dim mpPosition = mp.AutoScrollPosition Try Dim panelLeft As Integer = mp.Controls.Cast(Of Control)().Min(Function(c) c.Left - mp.AutoScrollPosition.X) Dim panelTop As Integer = mp.Controls.Cast(Of Control)().Min(Function(c) c.Top - mp.AutoScrollPosition.Y) Dim panelWidth As Integer = mp.Controls.Cast(Of Control)().Max(Function(c) c.Right - mp.AutoScrollPosition.X) Dim panelHeight As Integer = mp.Controls.Cast(Of Control)().Max(Function(c) c.Bottom - mp.AutoScrollPosition.Y) panelWidth += mp.Left + panelLeft panelHeight += mp.Top + panelTop 'Me.ClientSize = New Size(panelWidth, panelHeight) Me.Bounds = New Rectangle(bounds.Left, bounds.Top, bounds.Width - clientSize.Width + panelWidth, bounds.Height - clientSize.Height + panelHeight) mp.AutoScrollPosition = Point.Empty SaveName = SaveName & vTurnierName & "\Spielplan.jpg" Call SavePanelToBitmapAndClipBoard2(mp, SaveName) Finally Me.ClientSize = clientSize mp.AutoScrollPosition = mpPosition End Try End Sub
und...
Public Shared Sub SavePanelToBitmapAndClipBoard2(panel As ScrollableControl, fileName As String) Dim panelLeft As Integer = panel.Controls.Cast(Of Control)().Min(Function(c) c.Left - panel.AutoScrollPosition.X) Dim panelTop As Integer = panel.Controls.Cast(Of Control)().Min(Function(c) c.Top - panel.AutoScrollPosition.Y) Dim panelWidth As Integer = panel.Controls.Cast(Of Control)().Max(Function(c) c.Right - panel.AutoScrollPosition.X) Dim panelHeight As Integer = panel.Controls.Cast(Of Control)().Max(Function(c) c.Bottom - panel.AutoScrollPosition.Y) ' Als rechter/unterer Rand panelWidth += panelLeft panelHeight += panelTop Dim bitmapSize = New Size(panelWidth, panelHeight) Using panelBitmap = New Bitmap(bitmapSize.Width, bitmapSize.Height) ' Hintergrund wie Panel BackColor Using g = Graphics.FromImage(panelBitmap) Using backPen = New SolidBrush(panel.BackColor) g.FillRectangle(backPen, New Rectangle(Point.Empty, bitmapSize)) End Using End Using ' Steuerelemente auf die Bitmap zeichnen For Each c As Control In panel.Controls Dim controlBounds = New Rectangle( c.Left - panel.AutoScrollPosition.X, c.Top - panel.AutoScrollPosition.Y, c.Width, c.Height) c.DrawToBitmap(panelBitmap, controlBounds) Next ' Als JPG Speichern panelBitmap.Save(fileName, Imaging.ImageFormat.Jpeg) ' und ins Clipboard Clipboard.SetImage(panelBitmap) End Using MsgBox("Spielplan erfolgreich gespeichert!", vbOKOnly + vbInformation, "Speichern erfolgreich...") End Sub
Das speichern funktioniert leider nur beim ersten Mal, jedes weitere Mal bekomme ich einen allgemeinen Fehler in GDI+
mit diesen Informationen:
Informationen über das Aufrufen von JIT-Debuggen anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung. ************** Ausnahmetext ************** System.Runtime.InteropServices.ExternalException (0x80004005): Allgemeiner Fehler in GDI+. bei System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) bei DGWPlaner.frm16KO.SavePanelToBitmapAndClipBoard2(ScrollableControl panel, String fileName) in E:\Entwicklung\VB.Net\DGWPlaner\16KO.vb:Zeile 408. bei DGWPlaner.frm16KO.DruckenToolStripMenuItem_Click(Object sender, EventArgs e) in E:\Entwicklung\VB.Net\DGWPlaner\16KO.vb:Zeile 375. bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e) bei System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e) bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e) bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e) bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) bei System.Windows.Forms.Control.WndProc(Message& m) bei System.Windows.Forms.ToolStrip.WndProc(Message& m) bei System.Windows.Forms.MenuStrip.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.1586.0 built by: NETFXREL2. CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll. ---------------------------------------- DGWPlaner Assembly-Version: 5.0.0.0. Win32-Version: 5.0.0.0. CodeBase: file:///E:/Entwicklung/VB.Net/DGWPlaner/bin/Debug/DGWPlaner.EXE. ---------------------------------------- Microsoft.VisualBasic Assembly-Version: 10.0.0.0. Win32-Version: 14.6.1586.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.1586.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.1586.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.1586.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.1586.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.Runtime.Remoting Assembly-Version: 4.0.0.0. Win32-Version: 4.6.1586.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.Configuration Assembly-Version: 4.0.0.0. Win32-Version: 4.6.1586.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.1586.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. ---------------------------------------- mscorlib.resources Assembly-Version: 4.0.0.0. Win32-Version: 4.6.1586.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. ---------------------------------------- System.Windows.Forms.resources Assembly-Version: 4.0.0.0. Win32-Version: 4.6.1586.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. ---------------------------------------- Accessibility Assembly-Version: 4.0.0.0. Win32-Version: 4.6.1586.0 built by: NETFXREL2. CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll. ---------------------------------------- System.Drawing.resources Assembly-Version: 4.0.0.0. Win32-Version: 4.6.1586.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. ---------------------------------------- ************** 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.
Ich bin leider nicht so firm im Debuggen, vielleicht hat ja jemand eine Idee, wo ich diesen Fehler suchen muss..
Ein Umbenennen der vorhandenen Datei führt zu keinem Erfolg.
LG Micha
Antworten
-
Hi,
ich tippe mal auf:
SaveName = SaveName & vTurnierName & "\Spielplan.jpg"
Wenn Du savename global hälst, dann wird beim 2. und späteren speichern der name erstmal dupliziert und dann noch der TurnierName und "\spielplan.jpg" angehängt, was dann in
vTurnierName\Spielplan.jpgvTurnierName\Spielplan.jpg etc endet.
Viele Grüße,
Thorsten
- Bearbeitet Thorsten Gudera Dienstag, 24. Januar 2017 15:38
- Als Antwort markiert MKnost Dienstag, 24. Januar 2017 15:46
Alle Antworten
-
Hi,
ich tippe mal auf:
SaveName = SaveName & vTurnierName & "\Spielplan.jpg"
Wenn Du savename global hälst, dann wird beim 2. und späteren speichern der name erstmal dupliziert und dann noch der TurnierName und "\spielplan.jpg" angehängt, was dann in
vTurnierName\Spielplan.jpgvTurnierName\Spielplan.jpg etc endet.
Viele Grüße,
Thorsten
- Bearbeitet Thorsten Gudera Dienstag, 24. Januar 2017 15:38
- Als Antwort markiert MKnost Dienstag, 24. Januar 2017 15:46