2015-03-31 60 views
0

在Microsoft Office Word中有一個名爲Format Painter的函數,它複製文本的所有屬性(Color,FontFamily & FontSize)並在等待下一次選擇時存儲它,這是一個函數我還需要爲學校做一個作業,但我不知道如何做到這一點,我嘗試將屬性存儲在變量中,並在SelectionChanged函數中使用它們將它們粘貼到選定的文本上,但是這樣做了不工作,因爲我需要它的工作,我需要它的工作完全一樣在Word中,但這將是在C#richtextboxC#word like FormatPainter

任何幫助,將不勝感激。

我一直試圖做這樣的:

private bool copiedSelection = false; 

     void FormatPainter() 
     { 
      var fc = new FontConverter(); 
      Font f1 = new Font(rtxtInhoud.SelectionFont.FontFamily, rtxtInhoud.SelectionFont.Size); 
      Color c1 = rtxtInhoud.SelectionColor; 
      var fontAsString = fc.ConvertToInvariantString(f1); 
      Font f2 = (Font)fc.ConvertFromInvariantString(fontAsString); 
      font = f2.ToString(); 
      kleur = c1.ToString(); 
      var color = Regex.Match(kleur, @"\[(.*?)\]").Groups[1]; 
      kleur = color.ToString(); 
      copiedSelection = true; 
     } 

private void rtxtInhoud_SelectionChanged(object sender, MouseEventArgs e) 
    { 
     if (copiedSelection == true &&)) 
     { 
      rtxtInhoud.SelectionColor = ColorTranslator.FromHtml(kleur); 
     } 
     copiedSelection = false; 
    } 
+0

保持編碼,你在正確的軌道上。兩個注意事項:1)不需要將顏色投射到絃樂或背部! 2)'SelectionChanged'事件不僅在做出選擇時觸發,而且在被移除時觸發。所以你應該從這樣的檢查開始:'if(!copiedSelection || RTB.SelectionLength <= 0)return;' – TaW 2015-03-31 20:25:39

+0

所以基本上,確保SelectionChanged不會在選擇被刪除時觸發@TaW – Simplicity 2015-03-31 20:27:22

+0

確實或者你清除複製的選擇,而沒有任何樣式.. – TaW 2015-03-31 20:31:39

回答

1

下面是一個簡單的例子,使用兩個按鈕:一個存放一些格式的數據和一個畫當前選擇與存儲格式的數據。

SelectionChanged事件調用第二個按鈕,然後清除指示格式數據當前已加載的標誌。

bool loaded = false; 

    Font sFont; 
    Color sColor; 
    Color sBackcolor; 
    float sFontSize; 
    HorizontalAlignment sAlign; 
    //.. 

    private void cb_store_Click(object sender, EventArgs e) 
    { 
     loaded = true; 
     sFont = RTB.SelectionFont; 
     sColor = RTB.SelectionColor; 
     sAlign = RTB.SelectionAlignment; 
     sBackcolor = RTB.BackColor; 
     sFontSize = RTB.SelectionFont.Size; 
     //.. 
    } 

    private void cb_paint_Click(object sender, EventArgs e) 
    { 
     RTB.SelectionFont = sFont; 
     RTB.SelectionColor = sColor ; 
     RTB.SelectionAlignment = sAlign; 
     RTB.BackColor = sBackcolor; 
     RTB.SelectionFont = new Font(sFont.FontFamily, sFontSize); 
     //.. 
    } 

    private void RTB_SelectionChanged(object sender, EventArgs e) 
    { 
     if (!loaded || RTB.SelectionLength <= 0) return; 
     cb_paint_Click(null, null); 
     loaded = false; 
    } 

請注意,RTBRichTextBox;只有少數格式的數據被覆蓋;還有更多:SelectionBullet, SelectionCharOffset, SelectionHangingIndent, RTB.SelectionIndent, RTB.SelectionRightIndent

另外請注意,您需要清除其他幾個場合的國旗!

您可以通過一個函數替換cb_paint_Click,當然..

+0

非常感謝,這真的幫了我很大的忙,我現在所做的是我已經採取了你的cb_store_Click和cb_paint_Click的內容,並將它們放入我的函數中,FormatPainter()函數中的商店和paint在SelectionChanged函數 – Simplicity 2015-03-31 21:02:26

+0

好。現在到下一個任務:如果單擊格式畫家按鈕,Word可讓您保持格式設置,我相信按下Ctrl鍵。提示:我會用第二個標誌;-) – TaW 2015-03-31 21:33:22