仅显示VB Label中的最新行

时间:2012-11-17 17:35:21

标签: vb.net winforms vb.net-2010

问题 在VB标签中,如果有更多的行可以支持固定高度,那么额外的行将被切断,用户只能看到前几行。

我需要它完全相反。我想看看最新的5或6行。这意味着如果有比标签的固定高度更多的线条可以显示,那么所有线条都应该向上移动,最后一条线条在底部向上移动。顶线可以切断,但最新的线需要在底部。

我正在尝试做的示例 如果您查看控制台并输入dir之类的命令,则它会列出最新的目录,但您会在底部看到最新的读取目录。基本上,您会看到它读取的最新目录。您只能看到它读取的最新5或6个目录,而不是查看每个打印行。

另一个例子:查看文本框。如果您输入的文字多于文字高度,那么您会看到文本框在文本上自动滚动并显示最新的行,而较旧的行继续向上移动并最终被切断,直到您向上移动滚动条。我需要它完全相同,除非没有滚动条。

还有一个示例:如果将标签的TextAlign属性设置为Bottom Center,则会在添加更多行时看到文本向上移动。当标签填充行并且文本超出高度并被切断时,会出现问题。这不应该发生。顶部的文本应该被截断,但最新的一行应该从底部开始。

其他人推荐的解决方案 我给出的唯一解决方案是创建一个从标签派生的自定义控件。

还有其他方法可以做到这一点吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在新表格上放一个按钮和一个标签(以免弄乱现有代码)并复制并粘贴下面的代码并反复点击按钮,看看这是否能解决您的问题。

显然,如果确实如此,你仍然需要弄乱代码,以便它符合你的特殊需求。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Static TextLines As Generic.List(Of String) = Nothing
    Static SingleLineHeight As Integer = Nothing
    Static maxrows As Integer
    Static qty As Integer = Nothing
    Dim text As String = Nothing
    Dim counta As Integer = Nothing
    '
    'set MAX ROWS
    maxrows = 6
    ' Initalise
    If TextLines Is Nothing Then TextLines = New Generic.List(Of String)
    If SingleLineHeight = 0 Then
        Label1.Text = "Test Line"
        SingleLineHeight = Label1.Font.Height
        Label1.Text = ""
    End If
    '
    'process
    qty = qty + 1
    text = "Line Number " & qty
    TextLines.Add(text)
    Label1.Text = ""
    If TextLines.Count > maxrows - 1 Then TextLines.RemoveAt(0)
    For counta = 0 To TextLines.Count - 1
        Label1.Text = Label1.Text & TextLines(counta) & vbCrLf
    Next

End Sub