2009-09-10 7 views
19

क्या टेक्स्ट बॉक्स में लाइन गिनती प्रदर्शित होने वाली लाइनों की संख्या से अधिक होने पर केवल स्क्रॉल बार को स्क्रॉल बार को दिखाना/छिपाना संभव है?सामग्री को सीमाओं से परे होने पर टेक्स्टबॉक्स में स्क्रॉल बार प्रदर्शित करें C#

+0

दुर्भाग्य से नहीं। आप स्क्रॉल बार को क्षैतिज, लंबवत, या दोनों पर सेट कर सकते हैं लेकिन आवश्यक होने पर/छुपाएं नहीं। – Anders

+0

जो केवल बेसिक टेक्स्टबॉक्स में है - RichTextBox – Cullub

उत्तर

25

RichTextBox उपयोग करने पर विचार - यह है कि व्यवहार में बनाया गया है

+1

आज़ आज़ ऑस्टिन का प्रयास करें। कभी-कभी सबसे स्पष्ट समाधान सबसे अच्छे होते हैं :) – Anders

+1

संपत्ति को जोड़ने के लिए मत भूलना ScrollViewer.VerticalScrollBarVisibility = RichTextBox – 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

पर "ऑटो" उन लोगों के लिए जिन्हें टेक्स्टबॉक्स का उपयोग करना होगा (जैसे मुझे यह एक कस्टम नियंत्रण था) उपर्युक्त जवाब ठीक काम करता प्रतीत होता है। मुझे लगता है कि मुझे इसे + के साथ बदलना था या इसे थोड़ा सा बनाना था और मैंने textbox.wordwrap मान पर शब्दकोष को सशर्त बनाया। उम्मीद है की वो मदद करदे। – Tim

4

धन्यवाद डमी, यह काम करता है।! सी # में डमी जवाब का यहाँ लघु संस्करण

कॉल इस कोड को अपने 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. 
} 
0

मैं tnimas समाधान vb में काम मिल गया है। लिखित के रूप में कार्य अच्छी तरह से लिखा है और मैंने त्रुटियों को नहीं देखा है।

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 
संबंधित मुद्दे