Zum Inhalt springen

VB.NET IF Verzweigung scheint nicht zu reagieren?!


Empfohlene Beiträge

Geschrieben (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 von Gateway_man
Geschrieben
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. ;-)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...