2

我正在寻找在我的 Windows 窗体应用程序上自定义富文本框控件。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);
                        }
                }

请问有谁知道我应该怎么做?

4

2 回答 2

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);
            }
        }

    }
于 2012-09-13T13:43:43.463 回答
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();
    }
于 2012-09-13T13:53:44.023 回答