0

以前、vb.net でバーコード プログラムを書きました。エンド ユーザーが印刷ボタンをクリックすると、プログラムは ZPL バーコードを含むテキスト ファイルを開き、シリアル番号を 1 増やし、新しいシリアル番号をテキスト ファイルを読み取り、所定の量のバーコードをゼブラ プリンタに出力します。

現在、エンド ユーザーが PrintDialog に入力した数から必要な数のバーコードを出力するように、コードを書き直そうとしています。私の更新されたコードでは、DO UNTIL ......LOOP を入れてみました。ユーザーが PrintDialog ボックスに入れたバーコードの数を出力しますが、シリアル化はしません。つまり、ユーザーが PrintDialog に 5 を入力すると、プログラムは 02、03、04、05、06 を印刷する代わりにシリアル番号 01 を 5 回印刷します。

ユーザーが PrintDialog に入力した回数に基づいて、プログラムが必要な x 回を読み取り、書き込み、印刷する方法について、誰かが私にいくつかの指針を与えることができますか?

これが私の元のコードです:

     Dim sL() As String = IO.File.ReadAllLines("C:\Labels\loop test.txt")
     Dim CurrentBar(2) As String

        For i = 0 To 2
            CurrentBar(i) = sL(sL.Length - 3 + i)
        Next

       If CurrentBar(1).Length >= 28 Then

            CurrentBar(1) = CurrentBar(1).Substring(0, 18) & Format(CInt(CurrentBar(1).Substring(18, 10) + 1), "0000000000") & CurrentBar(1).Substring(28)

        Else

            MessageBox.Show("String is not long enough!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

        'Write the updated vaules back to the Text File
        IO.File.WriteAllText("C:\Labels\loop test.txt",
        CurrentBar(0) & vbNewLine &
        CurrentBar(1) & vbNewLine &
        CurrentBar(2))

    Dim psi As New ProcessStartInfo
            psi.UseShellExecute = True
            psi.Verb = "print"
            psi.WindowStyle = ProcessWindowStyle.Hidden                
            psi.FileName = "C:\Labels\loop test.txt"
            Process.Start(psi)

そして、ここに私の更新されたコードがあります:

    Dim PrintDialog1 As New PrintDialog()
    Dim psi As New ProcessStartInfo
    Dim sL() As String = IO.File.ReadAllLines("C:\Labels\loop test.txt")
    Dim CurrentBar(2) As String


        Do Until PrintDialog1.PrinterSettings.Copies - 1
        For i = 0 To 2
            CurrentBar(i) = sL(sL.Length - 3 + i)
        Next

        If CurrentBar(1).Length >= 28 Then

            CurrentBar(1) = CurrentBar(1).Substring(0, 18) & Format(CInt(CurrentBar(1).Substring(18, 10) + 1), "0000000000") & CurrentBar(1).Substring(28)

        Else

            MessageBox.Show("String is not long enough!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

        'Write the updated vaules back to the Text File
        IO.File.WriteAllText("C:\Labels\loop test.txt",
        CurrentBar(0) & vbNewLine &
        CurrentBar(1) & vbNewLine &
        CurrentBar(2))

        'Print the labels

        'Get the number of copies to print  
        If (PrintDialog1.ShowDialog() = DialogResult.OK) Then



        'print desired number of copies to target printer
        For I = 0 To PrintDialog1.PrinterSettings.Copies - 1

            psi.UseShellExecute = True
            psi.Verb = "print"
            psi.WindowStyle = ProcessWindowStyle.Hidden
            psi.Arguments = PrintDialog1.PrinterSettings.PrinterName.ToString()
            psi.FileName = "C:\Labels\loop test.txt"
            Process.Start(psi)
        Next
    End If
  Loop

そして、ここに私のテキストファイルがあります:

    ^XA
    ^LH20,85^BY3^AE^SN0000000001R,,Y^B3N,,60,,Y^FS
    ^XZ
4

1 に答える 1

0

新しいコードの問題は、ループを実行する前にテキスト ファイルを読み込んでいることだと思います。ループの最後で、新しい値を書き出しますが、それらを読み戻さない (または再利用する) ことはありません。したがって、入力は常にループが繰り返される前の状態になります。入れて考えます

sl() = IO.File.ReadAllLines("C:\Labels\loop test.txt")

Do Until ステートメントの直後にこれを修正する必要があります。

于 2012-08-08T12:00:06.053 に答える