Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Windows Forms / WinForm Controls / July 2007

Tip: Looking for answers? Try searching our database.

Delete text in a RichTextBox

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Jeronimo Bertran - 27 May 2005 01:48 GMT
How can I delete some text in a RichTextBox (without cutting it into the
clipboard)?

I am trying to delete a certain number of characters from the top of the
control...

I tried the following:

  SelectionStart = 0;
  SelectionLength = offset;
  SelectedText = "*";

And the selection is effectively replaced by a single *.  However if I
change the las line to:

       SelectedText = "";

The application simply beeps and does not remove the selection.

Thanks

Jeronimo Bertran
"Jeffrey Tan[MSFT]" - 27 May 2005 03:10 GMT
Hi Jeronimo,

Thanks for your post!!

For this issue, I have writen a little sample project, which used the code
snippet below for the deleting in Button1_Click event:

this.richTextBox1.SelectionStart=0;
this.richTextBox1.SelectionLength=4;
this.richTextBox1.SelectedText="";

However, it works well on my side, that is: I can successfully delete the
text in the richtextbox. So I suspect there maybe some special situation in
your project.

Can you create a sample reproduce application and attach it in the reply?
Then we can refer to the reproduce project and understand your problem much
better. Thanks
=====================================================
Thank you for your patience and cooperation. If you have any questions or
concerns, please feel free to post it in the group. I am standing by to be
of assistance.

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Signature

Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

Jeronimo Bertran - 27 May 2005 17:37 GMT
Jeffrey,

I checked it further and the problem hast to do with the richtextbox
being set as ReadOnly.  I am able to replace the selection with OTHER
text but not with the empty string???  here is the class I tested with
...

    public class MyRichText : RichTextBox
    {
        private int maxLines = 10;

        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public MyRichText()
        {
            // This call is required by the Windows.Forms Form
Designer.
            InitializeComponent();
            //
            // TODO: Add constructor logic here
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Component Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            //
            // MyRichText
            //
            this.ReadOnly = true;
            this.WordWrap = false;

        }
        #endregion

        protected void RemoveLines()
        {
            int linesToRemove = Lines.Length - maxLines;
            if (linesToRemove <= 0)
                return;

            try
            {
                int offset = 0;  
                for (int line = 0; line < linesToRemove; line
++)
                    offset += Lines[line].Length + 1;
               
                Select(0, offset);  
                SelectedText = "";
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message, "RemoveLines");
            }
        }

        public void AddLine(string text, int indent, Color
textColor, bool stamped)
        {
            if (Lines.Length >= maxLines)
                RemoveLines();

            // Clear selection and send caret to the end
            Select(TextLength, 0);
            SelectionIndent = indent;

            SelectionColor = textColor;
            String prefix = "";
            if (stamped)
                prefix = DateTime.Now.ToString() + " : ";

            SelectedText = prefix + text + "\n";
        }
    }
"Jeffrey Tan[MSFT]" - 28 May 2005 07:22 GMT
Hi Jeronimo,

Thanks for your feedback.

After setting RichTextBox's ReadOnly property to true, I can reproduce out
your problem with the code snippet below:
this.richTextBox1.SelectionStart = 0;
this.richTextBox1.SelectionLength =4;
this.richTextBox1.SelectedText ="";

Then I used Reflector to view the source code of RichTextBox.SelectedText
property's set accessor, which is listed below:
public virtual void set_SelectedText(string value)
{
     if (base.IsHandleCreated)
     {
           base.SendMessage(0xc5, 0x7fff, 0);
           base.SendMessage(0xc2, -1, (value == null) ? "" : value);
           base.SendMessage(0xb9, 0, 0);
           base.SendMessage(0xc5, this.maxLength, 0);
     }
     else
     {
           string text1 = this.Text.Substring(0, this.SelectionStart);
           string text2 = "";
           if ((this.SelectionStart + this.SelectionLength) <
this.Text.Length)
           {
                 this.Text.Substring(this.SelectionStart +
this.SelectionLength);
           }
           base.Text = text1 + value + text2;
     }
     this.ClearUndo();
}
In the code, 0xc5 is EM_LIMITTEXT, 0xc2 is EM_REPLACESEL, and 0xb9 is
EM_SETMODIFY.(You can search these consts messages in WinUser.h header file)

However, I still did not see any problem with this code snippet. What is
even strange is that I rewrite this function with customized P/invoke like
this:

[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam,
string lParam);

private int EM_REPLACESEL=0xc2;
private void button1_Click(object sender, System.EventArgs e)
{
    this.richTextBox1.SelectionStart = 0;
    this.richTextBox1.SelectionLength =4;
    string test=string.Empty;

    MessageBox.Show(this.richTextBox1.IsHandleCreated.ToString());
    SendMessage(this.richTextBox1.Handle, 0xc5, 0x7fff, null);
    SendMessage(this.richTextBox1.Handle, EM_REPLACESEL, -1,  (test == null) ?
"" : test);
    SendMessage(this.richTextBox1.Handle,0xb9, 0, null);
    SendMessage(this.richTextBox1.Handle,0xc5, this.richTextBox1.MaxLength,
null);
    this.richTextBox1.ClearUndo();
}
All works well.

I am not sure the cause of this issue. However, currently, I think we can
workaround this issue with my code snippet above. Hope this helps.
===============================================================
Thank you for your patience and cooperation. If you have any questions or
concerns, please feel free to post it in the group. I am standing by to be
of assistance.

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Signature

Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

Jeronimo Bertran - 28 May 2005 21:16 GMT
Thanks Jeffrey,

That solved the problem... I also tried Patrick's solution and it also
works.

Now that you mention the Reflector... how do you protect classes from being
disassembled??

Jeronimo
"Jeffrey Tan[MSFT]" - 31 May 2005 02:46 GMT
Hi Jeronimo,

I am glad our replies make sense to you.

Yes, because of the metadata of .Net assembly, it is really easy to do
reverse engineering on .Net assembly. Currently, we usually used the tool
"dotfuscator" to protect the .Net assembly from being disassembled, this
tool is included in .Net VS.net, you can refer it in the start menu in
VS.net 2003.(Note: it is a third-party tool, which is not supported by
microsoft)

For more information of using dotfuscator, please refer to:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dotfuscator
/dotf3e5x.asp

Additionally, the battle between code protection and reverse engineering is
going on for a long time, there is no perfect way to completely protect our
software unless preventing the people from using it. So dotfuscator only
gives our .Net assembly a certain level protection, but can not prevent the
"real" hack.

Anyway, hope my reply can help you. Thanks

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Signature

Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

C# Learner - 31 May 2005 04:05 GMT
> Now that you mention the Reflector... how do you protect classes from being
> disassembled??

For more information on that topic, check out Jon Skeet's article on it:
<http://www.yoda.arachsys.com/csharp/obfuscation.html>.
"Jeffrey Tan[MSFT]" - 03 Jun 2005 08:53 GMT
Hi Jeronimo,

Does my reply make sense to you? If you still have any concern, please feel
free to feedback. Thanks

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Signature

Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

Patrick Schlangen - 28 May 2005 08:46 GMT
Hi,

perhaps a quite dirty solution, but perhaps you can set the ReadOnly
property to false, delete the code and set it back to true.

> Jeffrey,
>
[quoted text clipped - 93 lines]
> }
> }
Herfried K. Wagner [MVP] - 27 May 2005 09:32 GMT
"Jeronimo Bertran" <jeronimo.bertran@newsgroup.nospam> schrieb:
> How can I delete some text in a RichTextBox (without cutting it into the
> clipboard)?
[quoted text clipped - 14 lines]
>
> The application simply beeps and does not remove the selection.

Mhm...  The code works fine for me.  How are you filling the richtextbox
control?

Signature

M S   Herfried K. Wagner
M V P  <URL:http://dotnet.mvps.org/>
V B   <URL:http://classicvb.org/petition/>

s_mat - 27 Jul 2007 23:02 GMT
thanks a lot for the workaround for setting selectedtext to "

From http://www.developmentnow.com/g/30_2005_5_0_0_528622/Delete-text-in-a-RichTextBox.ht

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.