-1

問題 VB ラベルで、固定の高さがサポートできるよりも多くの行がある場合、追加の行は切り取られ、ユーザーには最初の数行しか表示されません。

私はそれが完全に反対である必要があります。最新の5、6行が見たいです。つまり、ラベルの固定高さよりも多くの行がある場合、単純にそれらを切り取るのではなく、すべての行が上に移動し、最新の行が一番下になります。一番上の行は切り取ることができますが、最新の行は一番下にある必要があります。

私がやろうとしていることの例 コンソールを見て のようなコマンドを入力するとdir、最新のディレクトリが一覧表示されますが、最新の読み取りディレクトリが一番下に表示されます。基本的に、読み取った最新のディレクトリが表示されます。印刷されたすべての行を表示するのではなく、読み取った最新の 5 つまたは 6 つのディレクトリのみを表示します。

別の例: テキストボックスを見てください。高さよりも多くのテキストを入力すると、テキストボックスがテキスト上で自動スクロールし、最新の行が表示されますが、古い行は上に移動し続け、スクロールバーを上に移動するまで最終的には途切れます。スクロールバーがないことを除いて、まったく同じにする必要があります。

もう 1 つの例: ラベルの TextAlign プロパティを Bottom Center に設定すると、行を追加するとテキストが上に移動します。この問題は、ラベルが線で埋め尽くされ、テキストが高さを超えて途切れる場合に発生します。そんなことはあってはなりません。上部のテキストは途切れるはずですが、最新の行は引き続き下部から来るはずです。

他の人が推奨する 解決策 私が与えられた唯一の解決策は、ラベルから派生したカスタム コントロールを作成することです。

これを行うことができる他の方法はありますか?

ご協力ありがとうございました。

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 に答える