2009-09-10 4 views
19

Ist es möglich, die Bildlaufleiste in einem Textfeld nur dann ein-/auszublenden, wenn die Zeilenanzahl im Textfeld größer ist als die Anzahl der angezeigten Zeilen?Bildlaufleiste im Textfeld anzeigen, wenn der Inhalt die Grenzen überschreitet C#

+0

Leider nicht. Sie können Bildlaufleisten horizontal, vertikal oder beides einstellen, aber nicht anzeigen/ausblenden, wenn dies erforderlich ist. – Anders

+0

das ist nur in der Bacic Textbox - versuchen RichTextBox – Cullub

Antwort

25

Betrachten Sie die RichTextBox mit -. Es, dass das Verhalten in

+1

Ahh danke Austin. Manchmal sind die offensichtlichsten Lösungen die besten :) – Anders

+1

Vergessen Sie nicht, die Eigenschaft ScrollViewer.VerticalScrollBarVisibility = "Auto" zur RichTextBox hinzuzufügen – Smile4ever

7
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 
+1

Für diejenigen, die Textbox verwenden müssen (wie ich es tun musste, wie es ein benutzerdefiniertes Steuerelement ist) das obige Antwort scheint in Ordnung zu sein. Ich nahm an, dass ich das + durch OR ersetzen musste, um es bitweise zu machen, und ich machte den Wortbruch vom textbox.wordwrap-Wert abhängig. Ich hoffe, das hilft. – Tim

4

Dank dummy, funktioniert es gebaut hat! Hier kurze Version von Dummy-Antwort in C#

Anruf dieser Code am Ende Ihrer Sizechanged und Textchanged-Handler:

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. 
} 
0

Ich habe in vb tnimas Lösung arbeiten bekam. Funktioniert ganz gut wie geschrieben und ich habe die Fehler nicht gesehen.

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