2012-02-23 7 views
48

मेरा प्रोग्राम जावा कॉल करता है और फिर RichTextBox पर stdout को रीडायरेक्ट करता है। मेरी समस्या यह है कि प्रत्येक बार डेटा लिखे जाने पर लंबवत स्क्रॉलबार हमेशा बॉक्स के शीर्ष पर रहता है।रिच टेक्स्ट बॉक्स नीचे स्क्रॉल करें जब नया डेटा लिखा जाता है

भले ही आप नीचे स्क्रॉल करते हैं, एक बार नया डेटा लिखा गया है, यह शीर्ष पर जाता है। मुझे विपरीत पसंद है।

तो जब नया डेटा लिखा जाता है, तो यह नीचे रहता है। मैं यह कैसे कर सकता हूँ?

+0

एक WPF/XAML परियोजना के लिए, [WPF RichTextBox, अंत करने के लिए ऑटो स्क्रॉल] (http://stackoverflow.com/q/10308475) –

उत्तर

91

हाँ, आप ScrollToCaret() विधि का उपयोग कर सकते हैं:

// bind this method to its TextChanged event handler: 
// richTextBox.TextChanged += richTextBox_TextChanged; 
private void richTextBox_TextChanged(object sender, EventArgs e) { 
    // set the current caret position to the end 
    richTextBox.SelectionStart = richTextBox.Text.Length; 
    // scroll it automatically 
    richTextBox.ScrollToCaret(); 
} 
+0

देख मैं यह पता लगा। वीएस 2010 में किसी कारण से, मुझे समृद्ध टेक्स्ट बॉक्स पर क्लिक करना था, फिर ईवेंट पर क्लिक करना था, फिर टेक्स्टेड बदल गया और इसे "myrichTextBox_TextChanged" से लिंक करें। काम करने का सबसे अच्छा कारण। – user1158745

+0

किसी कारण से, विजुअल स्टूडियो 2017 इस संपत्ति को एक विकल्प के रूप में पेश नहीं करता है। क्या यह बहिष्कृत है? – SubjectX

+0

@SubjectX दस्तावेज कहता है कि यह अभी भी नेट फ्रेमवर्क के वर्तमान संस्करण में उपलब्ध है। –

-2

जब नए डेटा लेखन, यदि आप AppendText() का उपयोग यह अभ्यस्त ऊपर स्क्रॉल और हमेशा निचले भाग में रहना होगा।

+3

गलत! यह चयनित स्थिति में रहता है। – jAC

+4

AppendText अच्छी तरह से ऑटो-स्क्रॉल करता है myRichTextBox.HideSelection = false; – Philippe

11

रिचटेक्स्टबॉक्स अंत में स्क्रॉल किया जाएगा यदि यह ध्यान केंद्रित करता है और आप जानकारी जोड़ने के लिए AppendText का उपयोग करते हैं। यदि आप छिपाने के लिए छुपा चयन सेट करते हैं तो यह फोकस खो देता है और ऑटो स्क्रॉल होने पर इसका चयन जारी रखेगा।

मैंने लॉग व्यूअर जीयूआई डिज़ाइन किया है जो नीचे दी गई विधि का उपयोग करता है। यह एक पूर्ण कोर रखने के लिए उपयोग किया जाता है। हो रही इस कोड से छुटकारा और गलत पर HideSelection की स्थापना कर ली CPU उपयोग नीचे 1-2%

//Don't use this! 
richTextBox.AppendText(text); 
richTextBox.ScrollToEnd(); 
+0

यह WPF RichTextBox के लिए है। 'ScrollToEnd() 'WinForms संस्करण पर उपलब्ध एक विधि नहीं है। –

+0

यह टेक्स्टबॉक्सबॉक्स से प्राप्त होता है जिसमें 'स्क्रॉलटॉन्ड() ' – DrWu

+0

है, मुझे इसे' System.Windows.Forms.TextBoxBase'] (http://msdn.microsoft.com/en-us/) के लिए प्रलेखन में नहीं दिख रहा है। लाइब्रेरी/system.windows.forms.textboxbase (v = vs.110) .aspx) जिसे ['RichTextBox'] (http://msdn.microsoft.com/en-us/library/system.windows) द्वारा विरासत में मिला है। WinForms के लिए form.richtextbox (v = vs.110) .aspx)। –

-2

डालो करने के लिए संयुक्त राष्ट्र कलंक progressif बराबर उदाहरण =>

namespace SongTabs 
    { 
     public class RichTextBoxAutoScroll 
     { 
      protected int LineJump { get; set; } 
      protected int ActualLine = 1; 
      Timer Timer { get; set; } 
      RichTextBox RichTextBox { get; set; } 
      public RichTextBoxAutoScroll(RichTextBox rtb,int speed,int linejump) 
      { 
       this.LineJump = linejump; 
       this.RichTextBox = rtb; 
       this.Timer = new Timer(); 
       this.Timer.Interval = speed; 
       this.Timer.Tick += Timer_Tick; 
      } 

      void Timer_Tick(object sender, EventArgs e) 
      { 
       RichTextBox.SelectionStart = RichTextBox.GetFirstCharIndexFromLine(ActualLine); 
       RichTextBox.ScrollToCaret(); 
       ActualLine += LineJump; 
      } 
      public void Start() 
      { 
       Timer.Start(); 
      } 
     } 
    } 
-1

यह एक पुरानी सवाल है, लेकिन मैं इस समस्या में था और मैंने उपरोक्त के रूप में richTextBox_TextChanged घटना का उपयोग किया, जो काम करता है। लेकिन मुझे लगता है कि यह एक कामकाज है और किसी और के मामले में वास्तविक समाधान दस्तावेज करना चाहता था।

यदि आप इसे जोड़ते हैं तो ऑटो-स्क्रॉल होगा, हालांकि RichTextBox को ध्यान केंद्रित करना होगा। तो यह Focus पर AppendText से पहले यह सुनिश्चित करने के लिए कॉल करें कि यह स्वतः स्क्रॉल करता है।

richTextBox.Focus(); 

richTextBox.AppendText(text); 
+0

या तो काम नहीं करता है। डाउनवॉटिंग सिर्फ अन्य उपयोगकर्ताओं के लिए अधिक दृश्यमान होने के लिए। – SubjectX

संबंधित मुद्दे