noob_noob Ответов: 1

Печать более одного символа в visual studio


Я новичок в vb.net и в настоящее время разрабатывает систему массового обслуживания. Теперь моя проблема заключается в том, как я могу напечатать строку с 2 или более символами, например "билет № 11", единственный вывод, который делает моя система, - это первый символ в образце(буква "Т"). Приведенный ниже код - это весь файл для сохранения в базе данных, генерации номера билета и печати самого билета. Я не знаю, правильно ли я задаю здесь вопрос, в любом случае спасибо за любую помощь!

Что я уже пробовал:

Option Strict On
Imports System.Drawing.Printing
Imports System.IO.TextReader
Imports System.Math

Public Class FrmNumApp

    Dim printpsetting As New PageSettings
    Dim recordDoc As New PrintDocument

    Dim TextToPrint As String = ""

    Private Sub FrmNumApp_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        recordDoc.PrinterSettings.PrinterName = "EPSON L120 Series"
    End Sub

    Public Sub PrintHeader()
        TextToPrint = ""
        Dim StringToPrint As String = "APPROVAL"
        Dim LineLen As Integer = StringToPrint.Length
        TextToPrint &= StringToPrint.Length & Environment.NewLine
    End Sub

    Public Sub PrintItems()
        Dim myConn As New OleDb.OleDbConnection
        Dim myCmd As New OleDb.OleDbCommand
        NumApp.ToString()
        Dim connStr As String
        Try

            connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\MISKRISTIAN\Desktop\kuwewe\queuingsystem\bin\Debug\HMOOPD_DB1.mdb"
            myConn.ConnectionString = connStr
            myCmd.Connection = myConn
            myCmd.Connection.Open()
            myCmd.CommandText = "Select * from query1"
            myCmd.Prepare()
            myCmd.Parameters.AddWithValue("@NumApp", NumApp.Text)
            myCmd.CommandText = ("SELECT TOP 1 * FROM query1 ORDER BY ID DESC", myConn)
            myCmd.ExecuteNonQuery()
            TextToPrint = NumApp.Text

            myCmd.Connection.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub


    Public Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Static count As Integer = 0
        Dim textfont As Font = New Font("Arial Black", 42, FontStyle.Bold)

        Dim h, w As Integer
        Dim left, top As Integer
        With recordDoc.DefaultPageSettings
            h = 100
            w = 100
            left = 40
            top = 140
        End With

        Dim lines As Integer = CInt(Math.Round(h / 1))
        Dim b As New Rectangle(left, top, w, h)
        Dim format As StringFormat
        format = New StringFormat(StringFormatFlags.LineLimit)
        Dim line, chars As Integer

        e.Graphics.MeasureString(Mid(TextToPrint, count + 1), textfont, New SizeF(w, h), format, chars, line)
        e.Graphics.DrawString(TextToPrint.Substring(count, chars), New Font("Arial Black", 42, FontStyle.Bold), Brushes.Black, b, format)

        count = count + chars
        If count < TextToPrint.Length Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
            count = 0
        End If
    End Sub

    Public Sub ConPrint()
        Dim myConn As New OleDb.OleDbConnection
        Dim myCmd As New OleDb.OleDbCommand
        Dim connStr As String
        Try
            connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\MISKRISTIAN\Desktop\kuwewe\queuingsystem\bin\Debug\HMOOPD_DB1.mdb"
            myConn.ConnectionString = connStr
            myCmd.Connection = myConn
            myCmd.Connection.Open()
            myCmd.CommandText = "Select * from query2"
            myCmd.Prepare()
            myCmd.Parameters.AddWithValue("@NumCon", NumCon.Text)
            myCmd.CommandText = "SELECT TOP 1 * FROM query2 ORDER BY ID DESC"
            myCmd.ExecuteNonQuery()
            myCmd.Connection.Close()
            TextToPrint = NumCon.Text

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub APPROVAL_Click(sender As Object, e As EventArgs) Handles APPROVAL.Click
        Me.NumApp.Text = CStr(CDbl(NumApp.Text) + 1)
        Me.Label16.Text = "0"
        Dim sqlconn As New OleDb.OleDbConnection
        Dim sqlquery As New OleDb.OleDbCommand
        Dim connString As String
        Try
            connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\MISKRISTIAN\Desktop\kuwewe\queuingsystem\bin\Debug\HMOOPD_DB1.mdb"
            sqlconn.ConnectionString = connString
            sqlquery.Connection = sqlconn
            sqlconn.Open()
            sqlquery.CommandText = "INSERT INTO query1([Number])VALUES(@Number)"
            sqlquery.Parameters.AddWithValue("@Number", NumApp.Text)
            sqlquery.ExecuteNonQuery()
            '
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        PrintHeader()
        PrintItems()
        Dim printControl = New Printing.StandardPrintController
        PrintDocument1.PrintController = printControl
        Try
            Dim prntdiag As New PrintDialog
            If CBool(prntdiag.ShowDialog) Then
                PrintDocument1.Print()
            End If
        Catch ex As Exception
            MsgBox(ex.Message)

        End Try
        sqlconn.Close()

    End Sub
    Public Sub PrintCon_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintCon.PrintPage
        Static currentChar As Integer
        Dim textfont As Font = New Font("Arial Black", 36, FontStyle.Bold)

        Dim h, w As Integer
        Dim left, top As Integer
        With recordDoc.DefaultPageSettings
            h = 100
            w = 100
            left = 100
            top = 140
        End With

        TextToPrint = "Approval"

        Dim lines As Integer = CInt(Math.Round(h / 1))
        Dim b As New Rectangle(left, top, w, h)
        Dim format As StringFormat
        format = New StringFormat(StringFormatFlags.LineLimit)
        Dim line, chars As Integer

        e.Graphics.MeasureString(Mid(TextToPrint, currentChar + 1), textfont, New SizeF(w, h), format, chars, line)
        e.Graphics.DrawString(TextToPrint.Substring(currentChar, chars), New Font("Arial Black", 60, FontStyle.Bold), Brushes.Black, b, format)

        currentChar = currentChar + chars
        If currentChar < TextToPrint.Length Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
            currentChar = 0
        End If

    End Sub

    Private Sub CONSULTATION_Click(sender As Object, e As EventArgs) Handles CONSULTATION.Click
        Me.NumCon.Text = CStr(CDbl(NumCon.Text) + 1)
        Me.Label18.Text = "0"
        Try
            Dim sqlconn As New OleDb.OleDbConnection
            Dim sqlquery As New OleDb.OleDbCommand
            Dim connString As String
            connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\MISKRISTIAN\Desktop\kuwewe\queuingsystem\bin\Debug\HMOOPD_DB1.mdb"
            sqlconn.ConnectionString = connString
            sqlquery.Connection = sqlconn
            sqlconn.Open()
            sqlquery.CommandText = "INSERT INTO query2([Number])VALUES(@Number)"
            sqlquery.Parameters.AddWithValue("@Number", NumCon.Text)
            sqlquery.ExecuteNonQuery()
            sqlconn.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        ConPrint()
        Dim printControl = New Printing.StandardPrintController
        PrintCon.PrintController = printControl
        Try
            Dim prntdiag As New PrintDialog
            If CBool(prntdiag.ShowDialog) Then
                PrintCon.Print()
            End If
        Catch ex As Exception
            MsgBox(ex.Message)

        End Try
    End Sub

End Class

Richard MacCutchan

Я не совсем понимаю приведенный выше код, для начала там есть довольно много неинициализированных переменных. Почему вы печатаете только один символ строки?

noob_noob

Привет! спасибо, что ответили на мой вопрос. Я пытаюсь распечатать билет очереди с помощью программы, над которой работаю, но когда число в очереди достигает 10 и выше, он печатает только первую цифру номера(например, билет № "10", единственный символ, который был напечатан, - это "1")

Вот остальная часть кода:

Общественные Суб ConPrint()
Dim myConn как новый OleDb. OleDbConnection
Dim myCmd как новая Oledb. OleDbCommand
Dim connStr как строка
Попробуй
connStr = "поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=С:\Пользователи\MISKRISTIAN\рабочий стол\kuwewe\queuingsystem\бин\отладки\HMOOPD_DB1.МБР"
myConn.ConnectionString = connStr
myCmd.Соединение = myConn
myCmd.Соединение.Открыть()
myCmd.CommandText = " Select * from query2"
myCmd.Подготовить()
myCmd.параметры.AddWithValue ("@NumCon", NumCon. Text)
myCmd.CommandText = " SELECT TOP 1 * FROM query2 ORDER BY ID DESC"
myCmd.Метод executenonquery()
myCmd.Соединение.Закрывать()
TextToPrint = NumCon. Text

Поймать ex как исключение
Ящик для сообщений.Показать (например, сообщение)
Конец Попытки
Конец Подводной Лодки

Private Sub CONSULTATION_Click (sender As Object, e As EventArgs) обрабатывает консультацию.Щелчок
Меня.NumCon.Text = CStr(CDbl(NumCon. Text) + 1)
Меня.Label18.Text = " 0"
Попробуй
Dim sqlconn как новый OleDb.OleDbConnection
Дим SQL-запрос в качестве новых данных oledb.Объект oledbcommand
Dim connString как строка
connString = "поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=С:\Пользователи\MISKRISTIAN\рабочий стол\kuwewe\queuingsystem\бин\отладки\HMOOPD_DB1.МБР"
sqlconn.ConnectionString = connString
SQL-запрос.Соединение = sqlconn
sqlconn.Открыть()
SQL-запрос.CommandText = " вставить в query2([Number])значения (@Number)"
SQL-запрос.Параметры.AddWithValue ("@Number", NumCon. Text)
SQL-запрос.Метод executenonquery()
sqlconn.Закрывать()
Поймать ex как исключение
Ящик для сообщений.Показать (например, сообщение)
Конец Попытки
ConPrint()
Dim printControl = новая печать.StandardPrintController
PrintCon.PrintController = printControl
Попробуй
Dim prntdiag как новый PrintDialog
Если CBool(prntdiag.Метод showdialog) Затем
PrintCon.Печать()
Конец, Если
Поймать ex как исключение
MsgBox(например, сообщение)

Конец Попытки
Конец Подводной Лодки

Richard MacCutchan

Извините, но это все равно не поможет. Я предлагаю вам использовать свой отладчик, чтобы пройти через код в процедуре печати, чтобы увидеть, что происходит.

Graeme_Grant

Вы посмотрели ссылку на учебник, которую я опубликовал? Очень информативно-шаг за шагом с большим количеством примеров кода в VB...

1 Ответов

Рейтинг:
8

Graeme_Grant

Вот полный учебник: Печать в VB.Net - VB.NET учебники | Dream. In. Code[^]