<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>scrollablerichtextbox &#8211; Sanity Free Coding</title>
	<atom:link href="http://sanity-free.org/tag/scrollablerichtextbox/feed" rel="self" type="application/rss+xml" />
	<link>http://sanity-free.org</link>
	<description>Methods to the Madness</description>
	<lastBuildDate>Fri, 24 Oct 2025 07:56:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>http://sanity-free.org/wp-content/uploads/2025/10/sanity-free-512-150x150.jpg</url>
	<title>scrollablerichtextbox &#8211; Sanity Free Coding</title>
	<link>http://sanity-free.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ScrollableRichTextBox</title>
		<link>http://sanity-free.org/scrollablerichtextbox.html</link>
		
		<dc:creator><![CDATA[steve]]></dc:creator>
		<pubDate>Mon, 19 Apr 2004 18:00:24 +0000</pubDate>
				<category><![CDATA[C# Articles]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[customcontrol]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[scrollablerichtextbox]]></category>
		<guid isPermaLink="false">http://dev.sanity-free.org/?p=26</guid>

					<description><![CDATA[The standard RichTextBox&#8217;s &#8220;Auto-Scroll&#8221; functionality is so obscure, that most rarely ever find out how to use it. This class appends text and gives the option for the user to scroll to the bottom of the textbox. There used to be a threading problem which would throw an unhandled exception every now and then, but [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The standard RichTextBox&#8217;s &#8220;Auto-Scroll&#8221; functionality is so obscure, that most rarely ever find out how to use it. This class appends text and gives the option for the user to scroll to the bottom of the textbox.</p>



<div class="wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers cbp-highlight-hover" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono-NL.ttf" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#FFFFFF"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#000000;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/******************************************************/
/*          NULLFX FREE SOFTWARE LICENSE              */
/******************************************************/
/*  ScrollableRichTextBox Library                     */
/*  by: Steve Whitley                                 */
/*  © 2005 NullFX Software                            */
/*                                                    */
/* NULLFX SOFTWARE DISCLAIMS ALL WARRANTIES,          */
/* RESPONSIBILITIES, AND LIABILITIES ASSOCIATED WITH  */
/* USE OF THIS CODE IN ANY WAY, SHAPE, OR FORM        */
/* REGARDLESS HOW IMPLICIT, EXPLICIT, OR OBSCURE IT   */
/* IS. IF THERE IS ANYTHING QUESTIONABLE WITH REGARDS */
/* TO THIS SOFTWARE BREAKING AND YOU GAIN A LOSS OF   */
/* ANY NATURE, WE ARE NOT THE RESPONSIBLE PARTY. USE  */
/* OF THIS SOFTWARE CREATES ACCEPTANCE OF THESE TERMS */
/*                                                    */
/* USE OF THIS CODE MUST RETAIN ALL COPYRIGHT NOTICES */
/* AND LICENSES (MEANING THIS TEXT).                  */
/*                                                    */
/******************************************************/

namespace NullFX.Controls {
    using System;
    using System.Windows.Forms;
    /// &lt;summary>
    /// This components adds a much lacking function
    /// "Scroll to the end" which is missing
    /// from the original rich text box.
    /// &lt;/summary>
    public class ScrollableRichTextBox : RichTextBox {
        // constants for the message sending
        const int WM_VSCROLL = 0x0115;
        const int WM_LBUTTONDOWN = 0x0201;
        const int WM_SETFOCUS = 0x0007;
        const int WM_KILLFOCUS = 0x0008;
        readonly IntPtr SB_ENDSCROLL = (IntPtr)8;
        readonly IntPtr SB_BOTTOM = (IntPtr)7;
        // flag we use to determine if we can scroll
        bool _scrollable = true;
        private delegate void AppendTextDelegate(string text, bool scrollToEnd);
        public void AppendText(string text, bool scrollToEnd) {
            if(InvokeRequired) {
                Invoke(new AppendTextDelegate(AppendText), 
                           new object[] {text, scrollToEnd});
            }else {
                decimal length = base.Text.Length + text.Length;
                if(length >= base.MaxLength) base.Clear();
                base.Text += text;
                if(_scrollable &amp;&amp; scrollToEnd) {
                    if(IntPtr.Zero != base.Handle) {
                        base.SelectionStart = base.Text.Length;
                        Message m = Message.Create(
                            base.Handle, 
                            WM_VSCROLL, 
                            SB_BOTTOM, IntPtr.Zero);
                        base.WndProc(ref m);
                    }
                }
            }

        }

        protected override void WndProc(ref Message m) {
            // if we're in a scroll set the scrolling flag 
            // to false &amp; skip theauto scroll
            if((m.Msg == WM_LBUTTONDOWN) 
                || m.Msg == WM_VSCROLL 
                &amp;&amp; m.WParam != SB_BOTTOM) {
                _scrollable = false;
            }

            // if we are done scrolling, set the falg to true &amp; do the scrolling
            if(m.Msg == WM_VSCROLL &amp;&amp; m.WParam == SB_ENDSCROLL) {
                _scrollable = true;
            }
            // HACK: this keeps the user from setting the cursor in the textbox
            //  because that causes problems if they do
            if(m.Msg == WM_SETFOCUS &amp;&amp; base.ReadOnly) m.Msg = WM_KILLFOCUS;

            base.WndProc (ref m);
        }
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki light-plus" style="background-color: #FFFFFF" tabindex="0"><code><span class="line"><span style="color: #008000">/******************************************************/</span></span>
<span class="line"><span style="color: #008000">/*          NULLFX FREE SOFTWARE LICENSE              */</span></span>
<span class="line"><span style="color: #008000">/******************************************************/</span></span>
<span class="line"><span style="color: #008000">/*  ScrollableRichTextBox Library                     */</span></span>
<span class="line"><span style="color: #008000">/*  by: Steve Whitley                                 */</span></span>
<span class="line"><span style="color: #008000">/*  © 2005 NullFX Software                            */</span></span>
<span class="line"><span style="color: #008000">/*                                                    */</span></span>
<span class="line"><span style="color: #008000">/* NULLFX SOFTWARE DISCLAIMS ALL WARRANTIES,          */</span></span>
<span class="line"><span style="color: #008000">/* RESPONSIBILITIES, AND LIABILITIES ASSOCIATED WITH  */</span></span>
<span class="line"><span style="color: #008000">/* USE OF THIS CODE IN ANY WAY, SHAPE, OR FORM        */</span></span>
<span class="line"><span style="color: #008000">/* REGARDLESS HOW IMPLICIT, EXPLICIT, OR OBSCURE IT   */</span></span>
<span class="line"><span style="color: #008000">/* IS. IF THERE IS ANYTHING QUESTIONABLE WITH REGARDS */</span></span>
<span class="line"><span style="color: #008000">/* TO THIS SOFTWARE BREAKING AND YOU GAIN A LOSS OF   */</span></span>
<span class="line"><span style="color: #008000">/* ANY NATURE, WE ARE NOT THE RESPONSIBLE PARTY. USE  */</span></span>
<span class="line"><span style="color: #008000">/* OF THIS SOFTWARE CREATES ACCEPTANCE OF THESE TERMS */</span></span>
<span class="line"><span style="color: #008000">/*                                                    */</span></span>
<span class="line"><span style="color: #008000">/* USE OF THIS CODE MUST RETAIN ALL COPYRIGHT NOTICES */</span></span>
<span class="line"><span style="color: #008000">/* AND LICENSES (MEANING THIS TEXT).                  */</span></span>
<span class="line"><span style="color: #008000">/*                                                    */</span></span>
<span class="line"><span style="color: #008000">/******************************************************/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #0000FF">namespace</span><span style="color: #000000"> </span><span style="color: #267F99">NullFX</span><span style="color: #000000">.</span><span style="color: #267F99">Controls</span><span style="color: #000000"> {</span></span>
<span class="line"><span style="color: #000000">    </span><span style="color: #AF00DB">using</span><span style="color: #000000"> </span><span style="color: #267F99">System</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">    </span><span style="color: #AF00DB">using</span><span style="color: #000000"> </span><span style="color: #267F99">System</span><span style="color: #000000">.</span><span style="color: #267F99">Windows</span><span style="color: #000000">.</span><span style="color: #267F99">Forms</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #008000">    /// </span><span style="color: #800000">&lt;summary&gt;</span></span>
<span class="line"><span style="color: #008000">    /// This components adds a much lacking function</span></span>
<span class="line"><span style="color: #008000">    /// &quot;Scroll to the end&quot; which is missing</span></span>
<span class="line"><span style="color: #008000">    /// from the original rich text box.</span></span>
<span class="line"><span style="color: #008000">    /// </span><span style="color: #800000">&lt;/summary&gt;</span></span>
<span class="line"><span style="color: #000000">    </span><span style="color: #0000FF">public</span><span style="color: #000000"> </span><span style="color: #0000FF">class</span><span style="color: #000000"> </span><span style="color: #267F99">ScrollableRichTextBox</span><span style="color: #000000"> : </span><span style="color: #267F99">RichTextBox</span><span style="color: #000000"> {</span></span>
<span class="line"><span style="color: #008000">        // constants for the message sending</span></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0000FF">int</span><span style="color: #000000"> </span><span style="color: #001080">WM_VSCROLL</span><span style="color: #000000"> = </span><span style="color: #098658">0x0115</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0000FF">int</span><span style="color: #000000"> </span><span style="color: #001080">WM_LBUTTONDOWN</span><span style="color: #000000"> = </span><span style="color: #098658">0x0201</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0000FF">int</span><span style="color: #000000"> </span><span style="color: #001080">WM_SETFOCUS</span><span style="color: #000000"> = </span><span style="color: #098658">0x0007</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0000FF">int</span><span style="color: #000000"> </span><span style="color: #001080">WM_KILLFOCUS</span><span style="color: #000000"> = </span><span style="color: #098658">0x0008</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">readonly</span><span style="color: #000000"> </span><span style="color: #267F99">IntPtr</span><span style="color: #000000"> </span><span style="color: #001080">SB_ENDSCROLL</span><span style="color: #000000"> = (</span><span style="color: #267F99">IntPtr</span><span style="color: #000000">)</span><span style="color: #098658">8</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">readonly</span><span style="color: #000000"> </span><span style="color: #267F99">IntPtr</span><span style="color: #000000"> </span><span style="color: #001080">SB_BOTTOM</span><span style="color: #000000"> = (</span><span style="color: #267F99">IntPtr</span><span style="color: #000000">)</span><span style="color: #098658">7</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #008000">        // flag we use to determine if we can scroll</span></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">bool</span><span style="color: #000000"> </span><span style="color: #001080">_scrollable</span><span style="color: #000000"> = </span><span style="color: #0000FF">true</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #0000FF">delegate</span><span style="color: #000000"> </span><span style="color: #0000FF">void</span><span style="color: #000000"> </span><span style="color: #267F99">AppendTextDelegate</span><span style="color: #000000">(</span><span style="color: #0000FF">string</span><span style="color: #000000"> </span><span style="color: #001080">text</span><span style="color: #000000">, </span><span style="color: #0000FF">bool</span><span style="color: #000000"> </span><span style="color: #001080">scrollToEnd</span><span style="color: #000000">);</span></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">public</span><span style="color: #000000"> </span><span style="color: #0000FF">void</span><span style="color: #000000"> </span><span style="color: #795E26">AppendText</span><span style="color: #000000">(</span><span style="color: #0000FF">string</span><span style="color: #000000"> </span><span style="color: #001080">text</span><span style="color: #000000">, </span><span style="color: #0000FF">bool</span><span style="color: #000000"> </span><span style="color: #001080">scrollToEnd</span><span style="color: #000000">) {</span></span>
<span class="line"><span style="color: #000000">            </span><span style="color: #AF00DB">if</span><span style="color: #000000">(</span><span style="color: #001080">InvokeRequired</span><span style="color: #000000">) {</span></span>
<span class="line"><span style="color: #000000">                </span><span style="color: #795E26">Invoke</span><span style="color: #000000">(</span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #267F99">AppendTextDelegate</span><span style="color: #000000">(</span><span style="color: #001080">AppendText</span><span style="color: #000000">), </span></span>
<span class="line"><span style="color: #000000">                           </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #0000FF">object</span><span style="color: #000000">[] {</span><span style="color: #001080">text</span><span style="color: #000000">, </span><span style="color: #001080">scrollToEnd</span><span style="color: #000000">});</span></span>
<span class="line"><span style="color: #000000">            }</span><span style="color: #AF00DB">else</span><span style="color: #000000"> {</span></span>
<span class="line"><span style="color: #000000">                </span><span style="color: #0000FF">decimal</span><span style="color: #000000"> </span><span style="color: #001080">length</span><span style="color: #000000"> = </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #001080">Text</span><span style="color: #000000">.</span><span style="color: #001080">Length</span><span style="color: #000000"> + </span><span style="color: #001080">text</span><span style="color: #000000">.</span><span style="color: #001080">Length</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">                </span><span style="color: #AF00DB">if</span><span style="color: #000000">(</span><span style="color: #001080">length</span><span style="color: #000000"> &gt;= </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #001080">MaxLength</span><span style="color: #000000">) </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #795E26">Clear</span><span style="color: #000000">();</span></span>
<span class="line"><span style="color: #000000">                </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #001080">Text</span><span style="color: #000000"> += </span><span style="color: #001080">text</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">                </span><span style="color: #AF00DB">if</span><span style="color: #000000">(</span><span style="color: #001080">_scrollable</span><span style="color: #000000"> &amp;&amp; </span><span style="color: #001080">scrollToEnd</span><span style="color: #000000">) {</span></span>
<span class="line"><span style="color: #000000">                    </span><span style="color: #AF00DB">if</span><span style="color: #000000">(</span><span style="color: #001080">IntPtr</span><span style="color: #000000">.</span><span style="color: #001080">Zero</span><span style="color: #000000"> != </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #001080">Handle</span><span style="color: #000000">) {</span></span>
<span class="line"><span style="color: #000000">                        </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #001080">SelectionStart</span><span style="color: #000000"> = </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #001080">Text</span><span style="color: #000000">.</span><span style="color: #001080">Length</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">                        </span><span style="color: #267F99">Message</span><span style="color: #000000"> </span><span style="color: #001080">m</span><span style="color: #000000"> = </span><span style="color: #001080">Message</span><span style="color: #000000">.</span><span style="color: #795E26">Create</span><span style="color: #000000">(</span></span>
<span class="line"><span style="color: #000000">                            </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #001080">Handle</span><span style="color: #000000">, </span></span>
<span class="line"><span style="color: #000000">                            </span><span style="color: #001080">WM_VSCROLL</span><span style="color: #000000">, </span></span>
<span class="line"><span style="color: #000000">                            </span><span style="color: #001080">SB_BOTTOM</span><span style="color: #000000">, </span><span style="color: #001080">IntPtr</span><span style="color: #000000">.</span><span style="color: #001080">Zero</span><span style="color: #000000">);</span></span>
<span class="line"><span style="color: #000000">                        </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #795E26">WndProc</span><span style="color: #000000">(</span><span style="color: #0000FF">ref</span><span style="color: #000000"> </span><span style="color: #001080">m</span><span style="color: #000000">);</span></span>
<span class="line"><span style="color: #000000">                    }</span></span>
<span class="line"><span style="color: #000000">                }</span></span>
<span class="line"><span style="color: #000000">            }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #000000">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #000000">        </span><span style="color: #0000FF">protected</span><span style="color: #000000"> </span><span style="color: #0000FF">override</span><span style="color: #000000"> </span><span style="color: #0000FF">void</span><span style="color: #000000"> </span><span style="color: #795E26">WndProc</span><span style="color: #000000">(</span><span style="color: #0000FF">ref</span><span style="color: #000000"> </span><span style="color: #267F99">Message</span><span style="color: #000000"> </span><span style="color: #001080">m</span><span style="color: #000000">) {</span></span>
<span class="line"><span style="color: #008000">            // if we&#39;re in a scroll set the scrolling flag </span></span>
<span class="line"><span style="color: #008000">            // to false &amp; skip theauto scroll</span></span>
<span class="line"><span style="color: #000000">            </span><span style="color: #AF00DB">if</span><span style="color: #000000">((</span><span style="color: #001080">m</span><span style="color: #000000">.</span><span style="color: #001080">Msg</span><span style="color: #000000"> == </span><span style="color: #001080">WM_LBUTTONDOWN</span><span style="color: #000000">) </span></span>
<span class="line"><span style="color: #000000">                || </span><span style="color: #001080">m</span><span style="color: #000000">.</span><span style="color: #001080">Msg</span><span style="color: #000000"> == </span><span style="color: #001080">WM_VSCROLL</span><span style="color: #000000"> </span></span>
<span class="line"><span style="color: #000000">                &amp;&amp; </span><span style="color: #001080">m</span><span style="color: #000000">.</span><span style="color: #001080">WParam</span><span style="color: #000000"> != </span><span style="color: #001080">SB_BOTTOM</span><span style="color: #000000">) {</span></span>
<span class="line"><span style="color: #000000">                </span><span style="color: #001080">_scrollable</span><span style="color: #000000"> = </span><span style="color: #0000FF">false</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">            }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #008000">            // if we are done scrolling, set the falg to true &amp; do the scrolling</span></span>
<span class="line"><span style="color: #000000">            </span><span style="color: #AF00DB">if</span><span style="color: #000000">(</span><span style="color: #001080">m</span><span style="color: #000000">.</span><span style="color: #001080">Msg</span><span style="color: #000000"> == </span><span style="color: #001080">WM_VSCROLL</span><span style="color: #000000"> &amp;&amp; </span><span style="color: #001080">m</span><span style="color: #000000">.</span><span style="color: #001080">WParam</span><span style="color: #000000"> == </span><span style="color: #001080">SB_ENDSCROLL</span><span style="color: #000000">) {</span></span>
<span class="line"><span style="color: #000000">                </span><span style="color: #001080">_scrollable</span><span style="color: #000000"> = </span><span style="color: #0000FF">true</span><span style="color: #000000">;</span></span>
<span class="line"><span style="color: #000000">            }</span></span>
<span class="line"><span style="color: #008000">            // HACK: this keeps the user from setting the cursor in the textbox</span></span>
<span class="line"><span style="color: #008000">            //  because that causes problems if they do</span></span>
<span class="line"><span style="color: #000000">            </span><span style="color: #AF00DB">if</span><span style="color: #000000">(</span><span style="color: #001080">m</span><span style="color: #000000">.</span><span style="color: #001080">Msg</span><span style="color: #000000"> == </span><span style="color: #001080">WM_SETFOCUS</span><span style="color: #000000"> &amp;&amp; </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #001080">ReadOnly</span><span style="color: #000000">) </span><span style="color: #001080">m</span><span style="color: #000000">.</span><span style="color: #001080">Msg</span><span style="color: #000000"> = </span><span style="color: #001080">WM_KILLFOCUS</span><span style="color: #000000">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #000000">            </span><span style="color: #0000FF">base</span><span style="color: #000000">.</span><span style="color: #795E26">WndProc</span><span style="color: #000000"> (</span><span style="color: #0000FF">ref</span><span style="color: #000000"> </span><span style="color: #001080">m</span><span style="color: #000000">);</span></span>
<span class="line"><span style="color: #000000">        }</span></span>
<span class="line"><span style="color: #000000">    }</span></span>
<span class="line"><span style="color: #000000">}</span></span>
<span class="line"></span></code></pre><span style="display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#FFFFFF;color:#0d0d0d;font-size:12px;line-height:1;position:relative">C#</span></div>



<p>There used to be a threading problem which would throw an unhandled exception every now and then, but due to <a href="https://docs.microsoft.com/en-us/archive/blogs/jfoscoding/updating-your-richtextbox-safely">an article recently published on msdn blogs</a> this has been fixed, and the change is reflected above.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
