2012-09-13 69 views
2

我期待自定義我的Windows窗體應用程序上的富文本框控件。 RichTextbox將用於輸入一旦完成的文本數據,將通過短信發送。c#覆蓋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().Replace("\r\n", " "); 
          Clipboard.SetData(DataFormats.Text, contents); 
          richTextBox1.Paste(); 
         } 
          return true; 
         } 
         else 
         { 
         return base.ProcessCmdKey(ref msg, keyData); 
         } 
       } 

有誰知道我應該怎麼做這個嗎?

+0

此外,此代碼不會處理右鍵單擊/粘貼操作。 –

+0

您不能在Win Form上執行此操作,只能在WPF中執行此操作。 – Derek

回答

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

    } 
+0

超棒的東西。謝謝! :-) – Derek

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