【问题标题】:Display output on the form in VB 2010在 VB 2010 中的表单上显示输出
【发布时间】:2012-12-10 15:58:47
【问题描述】:

我正在设计一个窗体。我有输出显示在它自己的表单上。 尝试使用打印,但它不起作用。 我该怎么做?

我没有打印表格。

添加: 我需要在每个数字旁边显示 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"

【问题讨论】:

  • 是 VB.NET 还是 VB6?除了名字之外,他们几乎没有任何共同点。
  • 为什么?标签和面板等有什么问题?无论如何,如果必须,您可以覆盖表单绘制事件
  • 我不明白这个问题(“我有输出显示在它自己的表单上”)
  • vb.net 确实是一门全新的语言。 很多你在 vb6 中学到的范式需要被扔到窗外……即使是一些似乎仍然有效的东西也可能以微妙的方式产生与预期效果相反的效果。跨度>
  • @JoelCoehoorn 在 VB6 中直接将数据打印到表单中并不是一个好主意:)

标签: vb.net winforms printing


【解决方案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 这样的语句最接近。

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

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

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

【讨论】:

  • 您不会打印新行,您只会在更大的 Y 坐标处打印。
  • 我明白了,非常感谢。我现在看到了不同。我会继续玩=)
  • 有没有办法通过变量更新 New PointF(50.0F, 50.0F)) 的 Y 分量。这样我就可以在循环中使用相同的打印语句并更新 y 值
  • 是的。我更新了我的答案以显示一个例子。但我求求你。请不要这样做:(
  • @StevenDoggart:我喜欢你关于多行文本框的想法。如此简单,而且这项工作是可行的。
【解决方案2】:

我相信最有效的方法是使用 6 列的 tableLayoutPanel。在每个单元格中添加一个标签,在第一个单元格中显示数字,在第二个单元格中显示该数字的指示符(正确/错误)。对第二个和第三个数字执行相同的操作。(第二个数字 = 第三个和第四个单元格,第三个数字=第五个和第六个单元格)

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

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

首先在表单中添加 tableLayoutPanel。您可以随意调整大小(使其宽度足够长以处理数据) 您删除 lastRow 然后添加列(您希望有 6 列)。您将列的大小编辑为 Percentage =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 ,然后您可以添加无限数量的新行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多