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 に答える