Est-il possible d'afficher/masquer la barre de défilement dans une zone de texte uniquement lorsque le nombre de lignes dans la zone de texte est supérieur au nombre de lignes affichées?Afficher la barre de défilement dans la zone de texte lorsque le contenu dépasse les limites C#
Répondre
Pensez à utiliser la RichTextBox - il a ce comportement construit en
Ahh merci Austin. Parfois, les solutions les plus évidentes sont les meilleures :) – Anders
Ne pas oublier d'ajouter la propriété ScrollViewer.VerticalScrollBarVisibility = "Auto" à la RichTextBox – 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
Pour ceux qui doivent utiliser Textbox (comme je devais car c'est un contrôle personnalisé) ci-dessus la réponse semble fonctionner correctement. J'ai supposé que je devais remplacer le + avec OU pour le rendre au niveau du bit et j'ai fait le wordbreak conditionnel à la valeur de textbox.wordwrap. J'espère que cela pourra aider. – Tim
Merci mannequin, cela fonctionne.! Ici, version courte de la réponse factice dans C#
Appelez ce code à la fin de votre SizeChanged et gestionnaires 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.
}
J'ai tnimas solution de travail en vb. Fonctionne très bien comme écrit et je n'ai pas vu les erreurs.
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
- 1. SSRS 2008 Tronquer le contenu de la zone de texte
- 2. C# en utilisant le contrôle/l'événement de la barre de défilement (sans zone de texte ni défilement de la fenêtre)
- 3. Tous les composants Flex disparaissent lorsque la hauteur de la toile dépasse la limite
- 4. Comment se débarrasser de la barre de défilement verticale d'une zone de texte dans IE?
- 5. Force la barre de défilement verticale à afficher dans IE8
- 6. La division interne dépasse les limites div externes
- 7. ASP.NET Afficher les éléments sélectionnés de la zone de liste dans la zone de texte
- 8. Android: Comment afficher automatiquement la barre de défilement verticale?
- 9. Comment désactiver la barre de défilement par défaut pour les zones de texte dans IE8?
- 10. Comment faire pour étendre le contenu de la fenêtre lorsque la barre de défilement n'est pas visible dans wpf?
- 11. Liens dans la zone de texte C#
- 12. obtenir le contenu de la place de la zone de texte dans la couche iframe
- 13. html sélectionner la barre de défilement
- 14. Visual C++ contenu zone de texte copie
- 15. Zone de texte dans la barre d'outils personnalisée
- 16. Hiding barre de défilement verticale dans TextBox multiligne dans IE
- 17. Afficher le numéro de ligne dans la zone de texte enrichi C#
- 18. Désactiver la barre de défilement dans MDI Parent
- 19. Personnalisation de la barre de défilement
- 20. Activation de la barre de défilement dans WPF
- 21. comment définir la position de la barre de défilement dans le panneau de formulaire Windows (C#)
- 22. Comment supprimer des caractères d'une zone de texte lorsque le nombre de caractères dépasse une certaine limite?
- 23. Comment déboguer le problème de la barre de défilement horizontale?
- 24. Afficher uniquement les numéros dans une zone de texte
- 25. Des pages longues dans le décalage FireFox lorsque la barre de défilement apparaît
- 26. Listbox Personnalisation de la barre de défilement dans WPF
- 27. UITableView défilement sous la barre de navigation
- 28. Détecter lorsque la barre de défilement de la liste de contrôle WPF est en bas?
- 29. Afficher la ligne actuelle et le numéro de colonne pour une zone de texte
- 30. Utiliser une barre de défilement séparée pour une zone de texte
Malheureusement non. Vous pouvez définir les barres de défilement sur horizontal, vertical ou les deux, mais ne pas afficher/masquer si nécessaire. – Anders
c'est seulement dans la boîte de texte bacic - essayez RichTextBox – Cullub