c#覆盖RichTextBox粘贴功能 - Win Form App

时间:2012-09-13 13:33:25

标签: c# winforms richtextbox

我想在我的Windows窗体应用程序上自定义Rich Text Box控件。 RichTextbox将用于输入文本数据,一旦完成,将通过SMS文本消息发送。

要求是文本不能有任何换行符,因为一些较旧的移动电话不能正确显示信息并且它会丢失其格式。

我需要做的是在将剪贴板数据粘贴到RTB之前捕获剪贴板数据并自定义其格式,例如删除换行符。

我在这里找到了一个例子,它在某种程度上有效,但是可以粘贴到其他控件中: -

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
               {

                        if((keyData == (Keys.Control | Keys.V)))
                        {
                        IDataObject iData = Clipboard.GetDataObject();

                        if (iData.GetDataPresent(DataFormats.Text))
                        {
                             string contents = Clipboard.GetText().Replace("\r\n", " ");
                             Clipboard.SetData(DataFormats.Text, contents);
                             richTextBox1.Paste();
                        }
                          return true;
                        } 
                        else 
                        {
                         return base.ProcessCmdKey(ref msg, keyData);
                        }
                }

有人知道我应该怎么做吗?

2 个答案:

答案 0 :(得分:1)

您需要从RichTextBox继承,并按照您自己的描述添加自定义处理;您还可以将原始数据设置回剪贴板,以便将其粘贴到其他控件中(原始格式):

public class CustomRTB:RichTextBox
    {
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {

            if ((keyData == (Keys.Control | Keys.V)))
            {
                IDataObject iData = Clipboard.GetDataObject();

                if (iData.GetDataPresent(DataFormats.Text))
                {
                    string contents = Clipboard.GetText();
                    // string newText = *process text here*
                    Clipboard.SetData(DataFormats.Text, newText);
                    this.Paste();
                    Clipboard.SetData(DataFormats.Text, contents);
                }
                return true;
            }
            else
            {
                return base.ProcessCmdKey(ref msg, keyData);
            }
        }

    }

答案 1 :(得分:1)

尝试在文本发生变化时捕获文本并删除换行符:

    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        RichTextBox box = (RichTextBox)sender;
        box.Text = box.Text.Replace(Environment.NewLine, string.Empty);
        box.Text = box.Text.Replace("\n", string.Empty);
        box.SelectionStart = box.TextLength;
        box.ScrollToCaret();
    }