当内容超出界限时,在文本框中显示滚动条C#

仅当文本框中的行数大于显示的行数时,是否可以在文本框中显示/隐藏滚动条?

考虑使用RichTextBox – 它具有内置的行为。

Public Class TextBoxScrollbarPlugin Private WithEvents mTarget As TextBox '''  ''' After the Handle is created, mTarget.IsHandleCreated always returns ''' TRUE, even after HandleDestroyed is fired. '''  '''  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 

谢谢假,它的作品! 这里是c#中虚拟答案的简短版本

在SizeChanged和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. } 

我已经在vb中使用了tnimas解决方案。 写得很好,我没有看到错误。

  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