-1

问题 在 VB 标签中,如果行数超过了固定高度可以支持的数量,那么额外的行会被截断,用户只能看到前几行。

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

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

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

再举一个例子:如果您将标签的 TextAlign 属性设置为底部居中,那么当您添加更多行时,您会看到文本向上移动。当标签被线条填充并且文本超过高度并被切断时,就会出现问题。那不应该发生。顶部的文本应该被截断,但最新的一行应该继续来自底部。

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

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

感谢您的帮助。

4

1 回答 1

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
于 2012-12-17T03:16:25.457 回答