Печать более одного символа в 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...