tags:

views:

321

answers:

2

Hi, I am using Rich Text object in my C# application. The only issue I am having is that when user pastes formated text from another app, it remains formated which I cannot have. Is there any way how to paste only string and ignore formatting? Thanks!

+1  A: 

Assuming WinForms : try this : define a RichTextBox with a KeyDown event handler like this :

Append-only example :

    private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.V) 
        {
            richTextBox1.Text += (string)Clipboard.GetData("Text"); 
            e.Handled = true; 
        }
    }

[Edit]

Add Clipboard RTF to RichTextBox at current insertion point (selection start) example :

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.V)  
    { 
            // suspend layout to avoid blinking
            richTextBox2.SuspendLayout();

            // get insertion point
            int insPt = richTextBox2.SelectionStart;

            // preserve text from after insertion pont to end of RTF content
            string postRTFContent = richTextBox2.Text.Substring(insPt);

            // remove the content after the insertion point
            richTextBox2.Text = richTextBox2.Text.Substring(0, insPt);

            // add the clipboard content and then the preserved postRTF content
            richTextBox2.Text += (string)Clipboard.GetData("Text") + postRTFContent;

            // adjust the insertion point to just after the inserted text
            richTextBox2.SelectionStart = richTextBox2.TextLength - postRTFContent.Length;

            // restore layout
            richTextBox2.ResumeLayout();

            // cancel the paste
            e.Handled = true;
    } 
} 

[End Edit]

Note 0 : The pasted in text is going to assume the current style settings in effect for the RichTextBox : if you have 'ForeGround color set to 'Blue : the pasted in text is going to be in blue.

Note 1 : This is something I knocked together quickly, and tested only a few times by creating some multi-colored and weirdly formatted RTF for the clipboard using WordPad : then pasting into into the RichTextBox1 at run-time : it did strip away all the color, indenting, etc.

Since it's not fully tested, use caution.

Note 2 : This will not handle the case of 'Insert or 'Paste via Context Menu, obviously.

Welcome all critiques of this answer, and will immediately take it down if it's not "on the mark."

BillW
Works great, I am not using contextmenu, so hopefully it is resolved! Thanks
Tomas
Keep in mind that the code above is just appending the text to the end of the current RTF contents; for real-world use you'll probably want to handle the case where you want the pasted text to insert at the current insertion point in the RichTextBox (very easy to do). I've tested the code to make sure no error is thrown if the Clipboard is "Empty" : no problem there.
BillW
+1  A: 
        private void rtb_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.V)
            {
                ((RichTextBox)sender).Paste(DataFormats.GetFormat("Text"));
                    e.Handled = true;
            }
        }
nQk