2013-07-21 2 views
0

모든 것을 정렬하려고하지만 완전히 확실하지 않으려 고 노력하는 임 ... 이것은 내가 만든 것만 제외하고 항목 이름, 가격 및 기타가 정렬 형식이 아닌 것입니다. 정렬 할 수있는 방법이 있습니까? 을 heres 내 코드 ... 이런 기본적으로모든 것을 인쇄 미리보기에서 정렬 VB

Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 
    Dim printFont As New Font("Courier New", 10) 
    'Dim headingFont As New Font("Courier New", 10) 
    Dim sngLineHeight As Single = printFont.GetHeight + 2 
    Dim sngXLocation As Single = e.MarginBounds.Left 
    Dim sngYLocation As Single = e.MarginBounds.Top 
    Dim intItemCount As Integer 
    e.Graphics.DrawString("     XXXX Restaurant     ", printFont, Brushes.Black, sngXLocation, sngYLocation) 
    sngYLocation += sngLineHeight 
    e.Graphics.DrawString("      RECEIPT       ", printFont, Brushes.Black, sngXLocation, sngYLocation) 
    sngYLocation += sngLineHeight 
    e.Graphics.DrawString("========================================================", printFont, Brushes.Black, sngXLocation, sngYLocation) 
    sngYLocation += sngLineHeight 

    e.Graphics.DrawString(DateTime.Now.ToString("hh:mm dddd, dd MMMM yyyy"), printFont, Brushes.Black, sngXLocation, sngYLocation) 
    sngYLocation += sngLineHeight 
    sngYLocation += sngLineHeight 

    Dim ptOne As Point 
    Dim ptTwo As Point 
    ptOne.X = 10 
    ptOne.Y = 10 

    ptTwo.X = 10 
    ptTwo.Y = 200 
    e.Graphics.DrawLine(Pens.Black, ptOne, ptTwo) 
    intItemCount = frmSalesManagement.dgvSaleManagement.Rows.Count 
    Dim strItemDesc As String 
    Dim strItemDesc2 As String 
    Dim strItemDesc3 As String 
    Dim strItemDesc4 As String 
    Dim strTableNo As String 
    Dim strNoOfPerson As String 


    strTableNo = frmSalesManagement.txtTableNo.Text 
    strNoOfPerson = frmSalesManagement.txtNoOfPerson.Text 
    If frmSalesManagement.lblMemberName.Text <> "" Then 
     e.Graphics.DrawString("Member's Name  : " & frmSalesManagement.lblMemberName.Text.ToString, printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("Member's Discount : 10%", printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
    End If 

    e.Graphics.DrawString("Table No.: " & strTableNo, printFont, Brushes.Black, sngXLocation, sngYLocation) 
    sngYLocation += sngLineHeight 
    e.Graphics.DrawString("No of Person : " & strNoOfPerson, printFont, Brushes.Black, sngXLocation, sngYLocation) 
    sngYLocation += sngLineHeight 
    sngYLocation += sngLineHeight 
    e.Graphics.DrawString("ItemName" & vbTab & "" & vbTab & "Price" & vbTab & "" & vbTab & "Quantity" & vbTab & "" & vbTab & "Subtotal", printFont, Brushes.Black, sngXLocation, sngYLocation) 
    sngYLocation += sngLineHeight 
    sngYLocation += sngLineHeight 
    For i As Integer = 0 To intItemCount - 1 



     strItemDesc = frmSalesManagement.dgvSaleManagement.Rows(i).Cells(0).FormattedValue.ToString() + "" & vbTab & "" & vbTab 
     strItemDesc2 = frmSalesManagement.dgvSaleManagement.Rows(i).Cells(1).FormattedValue.ToString() + "" & vbTab & "" & vbTab 
     strItemDesc3 = frmSalesManagement.dgvSaleManagement.Rows(i).Cells(2).FormattedValue.ToString() + "" & vbTab & "" & vbTab 
     strItemDesc4 = frmSalesManagement.dgvSaleManagement.Rows(i).Cells(3).FormattedValue.ToString() + "" & vbTab & "" & vbTab 


     e.Graphics.DrawString(strItemDesc & strItemDesc2 & strItemDesc3 & strItemDesc4, printFont, Brushes.Black, sngXLocation, sngYLocation) 


     sngYLocation += sngLineHeight 
    Next 

    If lblMethodOfPayment.Text = "Cash" Then 
     e.Graphics.DrawString("Payment Method : " & lblMethodOfPayment.Text.ToString, printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("Discount : " & frmSalesManagement.txtDiscount.Text.ToString() & "%", printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 

     e.Graphics.DrawString("Due Amount : RM" & lblDueAmount.Text.ToString, printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("Amount Paid : RM" & txtAmountPaid.Text.ToString, printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("Change  : RM" & lblChange.Text.ToString, printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("======================= Thank You ======================", printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("========================== End =========================", printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
    ElseIf lblMethodOfPayment.Text = "Visa Card" Or lblMethodOfPayment.Text = "Master Card" Then 
     e.Graphics.DrawString("Payment Method : " & lblMethodOfPayment.Text.ToString, printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("Discount : " & frmSalesManagement.txtDiscount.Text.ToString() & "%", printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 

     e.Graphics.DrawString("Due Amount : RM" & lblDueAmount.Text.ToString, printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("Amount Paid : RM" & txtAmountPaid.Text.ToString, printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("======================= Thank You ======================", printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
     e.Graphics.DrawString("========================== End =========================", printFont, Brushes.Black, sngXLocation, sngYLocation) 
     sngYLocation += sngLineHeight 
    End If 
    sngYLocation += sngLineHeight 


End Sub 

답변

0

..

Dim x as Single = Convert.ToSingle(e.PageBounds.Width/2 - e.Graphics.MeasureString("XXXX Restaurant", PrintFont).Width/2) 

e.Graphics.DrawString("XXXX Restaurant",PrintFont, Brushes.Black, x, 100) 
2

가 Consolas 또는 신세기 같은 글꼴을 사용하기 때문에 그것은 아마 당신의 텍스트 편집기에서 괜찮 정렬됩니다. 모든 글자의 너비가 같은 글꼴입니다. 그리고 의도적으로 귀하의 코드에있는 진술을 얻기 위해 골랐어 요.

하지만 프린터에서는 작동하지 않으므로 가변 피치 글꼴로 인쇄 할 것입니다. 이 대답의 텍스트처럼, 편지 i는 문자 W보다 공간이 적습니다 : iiiiii vs WWWWWW.

DrawString() 텍스트에 공백을 넣지 마십시오. 정렬하지 않습니다. 대신 RectangleF와 StringFormat을 사용하는 DrawString의 오버로드를 사용하십시오. 그래서 StringAlignment.Center를 사용하여 문자열을 사각형의 중심에 완벽하게 배치합니다. 다음 줄에서 동일한 사각형 너비를 사용하면 텍스트가 이전 줄과 완벽하게 가운데에 배치됩니다. 프린터에 고정 된 피치 글꼴을 사용하면 문제가 해결되지만 아무도 보이는 방법을 좋아하지 않습니다.

관련 문제