Muestra la barra de desplazamiento en el cuadro de texto cuando el contenido está más allá de los límites C #

StackOverflow https://stackoverflow.com/questions/1407814

  •  05-07-2019
  •  | 
  •  

Pregunta

¿Es posible mostrar / ocultar la barra de desplazamiento en un cuadro de texto solo cuando el recuento de líneas en el cuadro de texto es mayor que el número de líneas mostradas?

¿Fue útil?

Solución

Considere el uso de RichTextBox - tiene ese comportamiento incorporado.

Otros consejos

Public Class TextBoxScrollbarPlugin
    Private WithEvents mTarget As TextBox

    ''' <summary>
    ''' After the Handle is created, mTarget.IsHandleCreated always returns
    ''' TRUE, even after HandleDestroyed is fired.
    ''' </summary>
    ''' <remarks></remarks>
    Private mIsHandleCreated As Boolean = False

    Public Sub New(item As TextBox)
        mTarget = item
        mIsHandleCreated = mTarget.IsHandleCreated
    End Sub

    Private Sub Update()
        If Not mTarget.IsHandleCreated Then
            Return
        ElseIf Not mIsHandleCreated Then
            Return
        End If
        Dim textBoxRect = TextRenderer.MeasureText(mTarget.Text,
                                                   mTarget.Font,
                                                   New Size(mTarget.Width, Integer.MaxValue),
                                                   TextFormatFlags.WordBreak + TextFormatFlags.TextBoxControl)

        Try
            If textBoxRect.Height > mTarget.Height Then
                mTarget.ScrollBars = ScrollBars.Vertical
            Else
                mTarget.ScrollBars = ScrollBars.None
            End If
        Catch ex As System.ComponentModel.Win32Exception
            'this sometimes throws a "failure to create window handle"
            'error.
            'This might happen if the TextBox is unvisible and/or
            'to small to display a toolbar.
            If mLog.IsWarnEnabled Then mLog.Warn("Update()", ex)
        End Try
    End Sub

    Private Sub mTarget_HandleCreated(sender As Object, e As System.EventArgs) Handles mTarget.HandleCreated
        mIsHandleCreated = True
    End Sub

    Private Sub mTarget_HandleDestroyed(sender As Object, e As System.EventArgs) Handles mTarget.HandleDestroyed
        mIsHandleCreated = False
    End Sub

    Private Sub mTarget_SizeChanged(sender As Object, e As System.EventArgs) Handles mTarget.SizeChanged
        Update()
    End Sub

    Private Sub mTarget_TextChanged(sender As Object, e As System.EventArgs) Handles mTarget.TextChanged
        Update()
    End Sub

End Class


Private mPlugins As New List(Of Object)
Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    mPlugins.Add(New TextBoxScrollbarPlugin(txtBoxOne))
    mPlugins.Add(New TextBoxScrollbarPlugin(txtBoxTwo))
    mPlugins.Add(New TextBoxScrollbarPlugin(txtBoxThree))
End Sub  

Gracias maniquí, funciona! Aquí la versión corta de la respuesta ficticia en c #

Llame a este código al final de sus controladores SizeChanged y TextChanged:

Size textBoxRect = TextRenderer.MeasureText(
    this.YourTextBox.Text, 
    this.YourTextBox.Font, 
    new Size(this.YourTextBox.Width, int.MaxValue),
    TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl);
try
{
    this.YourTextBox.ScrollBars = textBoxRect.Height > this.YourTextBox.Height ? 
        ScrollBars.Vertical : 
        ScrollBars.None;
} catch (System.ComponentModel.Win32Exception)
{
     // this sometimes throws a "failure to create window handle" error.
     // This might happen if the TextBox is unvisible and/or
     // too small to display a toolbar.
}

Tengo una solución tnimas trabajando en vb. Funciona bastante bien como está escrito y no he visto los errores.

    Private Sub TextBoxSizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged
    Dim textBoxRect As Size = TextRenderer.MeasureText(TextBox.Text, TextBox.Font, New Size(TextBox.Width, Integer.MaxValue), TextFormatFlags.WordBreak Or TextFormatFlags.TextBoxControl)
    Try
        TextBox.ScrollBar = If(textBoxRect.Height > TextBox.Height, ScrollBars.Vertical, ScrollBars.None)
    Catch ex As Exception
        'handle error
    End Try
End Sub
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top