Gateway_man Geschrieben 6. August 2010 Geschrieben 6. August 2010 (bearbeitet) Hallo, folgende Problematik: Eigentlich ist es ein realtiv einfaches konstrukt. Ich rufe eine Klasse auf die mir alle momentan verfügbaren Drucker abruft und deren aktuelle Konfigurationen zurückgibt. Dann lasse ich die Papiergröße berechnen um diese dann mit einer anderen errechneten Größe zu vergleichen. Sieht in etwa so aus: Imports System.Data.SqlClient Imports System.Data Imports Microsoft.Office.Interop.Excel Public Class Form1 Private WithEvents pr As New printers Dim list As List(Of printers._PrinterSettings) Delegate Sub change() Private sql As New SqlConnection(ConnectionString) Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dialog1.ComboBox1.Items.Clear() For i As Integer = 0 To list.Count - 1 Dialog1.ComboBox1.Items.Add(list(i).DeviceName) Next If Dialog1.ShowDialog = System.Windows.Forms.DialogResult.OK Then Dim cprinter As printers._PrinterSettings = list(Dialog1.ComboBox1.SelectedIndex) Dim ada As New SqlDataAdapter("exec GetAllData 1", sql) Dim dt As New Data.DataTable ada.Fill(dt) Dim app As New Application Dim wb As Workbook = app.Workbooks.Add() If wb.Worksheets.Count > 1 Then Dim count As Integer = 0 For i1 As Integer = 2 To wb.Worksheets.Count wb.Worksheets(i1 - count).Delete() count += 1 Next End If Dim ws As Worksheet = wb.Worksheets(1) ws.PageSetup.PaperSize = cprinter.PaperSize Dim counter As Integer = 0 Dim cHeight As Double = 0.0 For i As Integer = 0 To dt.Rows.Count - 1 counter += 1 ''Es handelt sich hierbei um die untenstehende If Verzweigung If cHeight <= cprinter.Size.Height Then For i1 As Integer = 0 To dt.Columns.Count - 1 Dim lrange As Range = ws.Cells(counter, 1 + i1) lrange.Value = dt.Rows(i)(i1) Next Dim lcache As Range = ws.Range(ws.Cells(1, 1), ws.Cells(counter, 1)) cHeight = lcache.Height Else Dim lrange As Range = ws.Cells(counter, 1) lrange.Value = "LastPiece" ws = wb.Worksheets.Add(System.Reflection.Missing.Value, ws) ws.PageSetup.PaperSize = cprinter.PaperSize counter = 0 cHeight = 0 End If Next wb.SaveAs("C:\reaven.xls") wb.Close() app.Quit() End If End Sub Private Sub pr_End_GetPrinter(ByVal obj As Object, ByVal e As System.EventArgs) Handles pr.End_GetPrinter list = pr.PrinterList Dim ole As New change(AddressOf Lock_Change) Me.Invoke(ole) End Sub Public Sub Lock_Change() Button1.Enabled = True End Sub End Class Aufgrund des sehr mysteriösen Ergebnis hatte ich dann die Überwachungen für die Variablen cHeight und cprinter.Size.Height eingefügt um beim debuggen deren Wert sehen zu können. Das Ergebnis hatte mich verwirrt, da die Bedingung (cHeight <= cprinter.Size.Height) nicht erfüllt wurde und dennoch in den Block geswitcht wurde und nicht in den Else Block. Sprich cHeight war bereits Größer als cprinter.Size.Height und dennoch wurde der Ausdruck True. Ich versteh die Welt nichtmehr.... Hatte eventuell jemand schonmal ein ähnliches Phänomen oder einen guten Rat? lg Gateway .:Edit:. Hat sich schon erledigt. Kann gelöscht werden ...... Bearbeitet 6. August 2010 von Gateway_man Zitieren
lbm1305 Geschrieben 6. August 2010 Geschrieben 6. August 2010 Hallo, folgende Problematik: Eigentlich ist es ein realtiv einfaches konstrukt. ?? Wenn ich nach "Clean-Code" gehen würde, erschlägt einem dieses Konstrukt :roll: :-) Zitieren
Gateway_man Geschrieben 6. August 2010 Autor Geschrieben 6. August 2010 Das war nur zu Testzwecken.... Meines erachtens ist das ein Sauberer Code... Man hätte natürlich noch per Region n bisschen Gliedern können aber naja. Zitieren
lbm1305 Geschrieben 6. August 2010 Geschrieben 6. August 2010 Das war nur zu Testzwecken.... Meines erachtens ist das ein Sauberer Code... Man hätte natürlich noch per Region n bisschen Gliedern können aber naja. Sauberer Code heißt nicht gliedern mit Hilfe von #region. Die ClickHandler Methode hat, nach erstem Überfliegen, mindestens 7 Aufgaben. Jede Methode sollte eine Aufgaben haben. Aber da es eh nur zum Testen war. ;-) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.