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#
Antwort
Betrachten Sie die RichTextBox mit -. Es, dass das Verhalten in
Ahh danke Austin. Manchmal sind die offensichtlichsten Lösungen die besten :) – Anders
Vergessen Sie nicht, die Eigenschaft ScrollViewer.VerticalScrollBarVisibility = "Auto" zur RichTextBox hinzuzufügen – Smile4ever
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
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
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.
}
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
Leider nicht. Sie können Bildlaufleisten horizontal, vertikal oder beides einstellen, aber nicht anzeigen/ausblenden, wenn dies erforderlich ist. – Anders
das ist nur in der Bacic Textbox - versuchen RichTextBox – Cullub