2

開発中の POS アプリケーションに Zebra GK420d ラベル プリンターを使用しています。Zebra が提供する OPOS ドライバーを介してプリンターと通信しようとしています。でも困っちゃう。ボタンが付いた、Visual Basic 2008 のシンプルなフォームです。これが私が実行している完全なコードです。

Public Class FrameStep1 Inherit System.Windows.Forms.Form

Private m_Printer As Microsoft.PointOfService.PosPrinter = Nothing

Private Sub ChangeButtonStatus()

    'Disable control.
    btnPrint.Enabled = False
End Sub

Private Sub FrameStep1_Load(ByVal sender As System.Object _
, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim strLogicalName As String
    Dim deviceInfo As DeviceInfo
    Dim posExplorer As PosExplorer

    strLogicalName = "zebra"
    posExplorer = New PosExplorer

    m_Printer = Nothing

    Try
        deviceInfo = posExplorer.GetDevice(DeviceType.PosPrinter, strLogicalName)
        m_Printer = posExplorer.CreateInstance(deviceInfo)

    Catch ex As Exception
        ChangeButtonStatus()
        Return
    End Try

    Try

        m_Printer.Open()
        m_Printer.Claim(1000)
        m_Printer.DeviceEnabled = True

    Catch ex As PosControlException

        ChangeButtonStatus()

    End Try
End Sub


 Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click

    Try

        m_Printer.PrintNormal(PrinterStation.Receipt, "Hello OPOS for .Net" + vbCrLf)

    Catch ex As PosControlException

    End Try
End Sub

Private Sub FrameStep1_Closing(ByVal sender As Object _
, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

    If m_Printer Is Nothing Then
        Return
    End If

    Try
        m_Printer.DeviceEnabled = False
        m_Printer.Release()
    Catch ex As Exception

    Finally
        m_Printer.Close()

    End Try
End Sub

クラス終了

claim() を呼び出して、DeviceEnabled=true に設定したことがわかります。ただし、デバッグすると、コントロールが m_Printer.Open() を通過すると、魔法のように btnPrint_Click() になり、フォームのボタンをクリックしてから m_Printer.PrintNormal() に移動しない限り、それ以上進みません。中断して POSControlException をスローし、その中のテキストに「メソッドまたはプロパティ セット アクションを使用する前に要求する必要がある専用デバイスにアクセスしようとしました」と表示されます。

私はここで何か間違ったことをしているようですか?

4

1 に答える 1

1

これを試すことができます:

if (m_Printer.State == ControlState.Closed)
  { m_Printer.Open();     }           

if (!m_Printer.Claimed)
                   { m_Printer.Claim(0);}

if (!m_Printer.DeviceEnabled)
                   { m_Printer.DeviceEnabled = true;}

Printer.PrintNormal(PrinterStation.Receipt, text);

Printer.CutPaper(100);

また、一部の ZEBRA プリンタは、印刷を開始する前にペーパー カッターを待機することにも注意してください。

于 2011-03-21T20:02:04.523 に答える