Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 von Gateway_man

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. ;-)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.