在VB 2010中显示表单上的输出

时间:2012-12-10 15:58:47

标签: vb.net winforms printing

我正在设计一个Windows窗体。我有输出显示在它自己的表格上。 尝试使用打印,但它无法正常工作。 我该怎么做?

我不打印表格。

增加: 我需要在每个数字旁边显示3个带有文本字符串的数字。 我希望以表格中的形式或标签显示的方式执行此操作,而不会覆盖以前的结果。

示例:

    3 (wrong) 1 (right) 8 (wrong)
    2 (wrong) 1 (right) 5 (right)
    9 (right) 1 (right) 5 (right)

增加: 感谢大家的帮助。还有一个问题,我觉得我很好。

我想在循环中做这样的事情,问题是我不能一起添加一个字符串和一个int来创建一个新的var:         Xnum1 = Xnum1 + 50

    Xnum2 = Xnum1 + ".0F"

    Ynum1 = Ynum1 + 50

    Ynum2 = Ynum1 + ".0F"

2 个答案:

答案 0 :(得分:1)

在VB6中,您可以使用Print语句绘制到表单的表面。但是,在VB.NET中,您应该使用Form.CreateGraphics方法创建一个新的Graphics对象,该对象可用于绘制到表单的表面。例如:

Private Sub PrintText(text As String, x As Single, y As Single)
    Dim g As Graphics = Me.CreateGraphics()
    g.DrawString(text, New Font("Arial", 16), New SolidBrush(Color.Black), New PointF(x, y))
End Sub

这与使用VB6 Print语句最接近等效。<​​/ p>

但是,我强烈建议使用控件来显示数据。看起来您需要显示的数据,一个简单的多行文本框或标签就足够了。例如:

Private Sub AppendResult(index As Integer, right As Boolean)
    If right Then
        TextBox1.Text = TextBox1.Text & " " & index.ToString() & " (right)"
    Else
        TextBox1.Text = TextBox1.Text & " " & index.ToString() & " (wrong)"
    End If
End Sub

如果你想获得更多花哨,你可以考虑使用数据网格,列表框,列表视图,甚至是表格​​布局控件。

答案 1 :(得分:1)

我认为最有效的方法是使用带有6列的tableLayoutPanel。在每个单元格中添加一个标签,在第一个单元格中显示该数字,在第二个单元格中显示该数字的指示符(正确/错误)。对第二和第三个数字做同样的事情。(第二个数字=第三个和第四个数字,第三个数字=第五和第六个数字)

对于下一组数字,您可以在每个单元格中添加带有标签的新行。

我会添加一些代码,让我的答案更专业。

首先在表单中添加tableLayoutPanel。您可以根据需要调整大小(使其宽度足够长,以便处理数据) 您删除lastRow然后添加列(您希望有6列)。您将列的大小编辑为百分比= 16.67%

Public Class Form1

Private rowIndex
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    For i = 0 To 4 Step 2
        Dim val As Integer = 3
        AddLabels(val, i, 0)
    Next
    For i = 1 To 5 Step 2
        Dim val As String = "right"
        AddLabels(val, i, 0)
    Next
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    rowIndex = rowIndex + 1


    Me.TableLayoutPanel1.RowStyles.Add(New RowStyle(SizeType.Absolute, 30))
    Me.TableLayoutPanel1.Height = Me.TableLayoutPanel1.Height + 30
    For i = 0 To 4 Step 2
        Dim val As Integer = 3 'here you have to put your number
        AddLabels(val, i, rowIndex)
    Next
    For i = 1 To 5 Step 2
        Dim val As String = "right" 'here you have to put your indicator
        AddLabels(val, i, rowIndex)
    Next

End Sub


Private Sub AddLabels(ByVal lblValue As String, ByVal column As Integer, ByVal row As Integer)
    Dim lblHeader As New Label
    lblHeader.AutoSize = True
    lblHeader.Margin = New Padding(0)
    lblHeader.BackColor = Color.Transparent
    lblHeader.TextAlign = ContentAlignment.MiddleLeft
    lblHeader.Dock = DockStyle.None
    lblHeader.Text = lblValue

    'Put the lblHeader in the right cell
    Dim lblHeaderPos As New TableLayoutPanelCellPosition(column, row)
    TableLayoutPanel1.SetCellPosition(lblHeader, lblHeaderPos)
    TableLayoutPanel1.Controls.Add(lblHeader)

End Sub

如果您遇到任何问题,请告诉我。

此外,如果您不知道要添加多少行,请将tableLyoutPanel放在面板中。使面板的属性AutoScroll = True,然后您可以添加无限数量的新行。