2016-01-21 67 views
2

我們凱普斯組設計設計大綱模板,其中一個要求是能夠添加和刪除相若方式運作到Microsoft Word可調整大小的表精簡的文本編輯器(rtf)表,它們必須通過「拖動」以及可定製的字體等來調整大小。 它們還必須放置在RichTextBox中,或者至少以可以在常規文本和帶文本的單元格之間輕鬆轉換的方式。添加可調整大小的表到一個RichTextBox(.NET或C#)

我們採用不同的方法,包括TableLayoutPanel中(不,因爲它不能在RichTextBox的直接放在工作)嘗試,我們發現使用Stringbuilder最接近的,但是這仍然不能準確地工作,因爲細胞不能調整大小,而字符串本身很難操作。我們還需要「合併單元格」的能力。

我們試圖在.NET和C#設計,但是結果是相似的。如果任何人有任何建議如何工作這個計劃,我將不勝感激。這是創建表的代碼:

Private Sub tsbTwoRows_Click(sender As Object, e As EventArgs) Handles tsbTwoRows.Click 

    Dim rtbTemp As New RichTextBox 
    Dim sbTaRtf As New System.Text.StringBuilder 

    'These strings are necessary so that it will be visible in MS Word 
    sbTaRtf.Append("{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}") 
    sbTaRtf.Append("\viewkind4\uc1\trowd\trgaph108\trleft5\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 ") 

    sbTaRtf.Append("\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs") 
    sbTaRtf.Append("\cellx4678") 'set the width of the first cell 
    sbTaRtf.Append("\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs") 
    sbTaRtf.Append("\cellx9355") 'set the width of the second cell 

    sbTaRtf.Append("\pard\intbl\ltrpar\sl252\slmult1\lang3082\f0\fs22\cell\cell\cell\row") 

    sbTaRtf.Append("\pard\ltrpar\lang1033\f1\fs17\par") 
    sbTaRtf.Append("}") 

    rtbTemp.Rtf = sbTaRtf.ToString() 

    'This prevents the new table from deleting the text 
    rtbContent.SelectedRtf = rtbTemp.Rtf 

    rtbTemp.Undo() 

    Me.rtbContent.Focus() 
    Me.rtbContent.SelectionStart = Me.rtbContent.SelectionStart - 1 
    Me.rtbContent.SelectionLength = 0 

End Sub 

enter image description here

回答

0

好了,很多的試驗和錯誤之後,我們發現,StringBuilder的工作,而不穩定.NET上,我們試圖在C#下面的代碼和它的工作好得多:

StringBuilder tableRtf = new StringBuilder(); 
     tableRtf.Append(@"{\rtf1"); 
     tableRtf.Append(@"\trowd"); 
     tableRtf.Append(@"\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs"); 
     tableRtf.Append(@"\cellx1000"); 
tableRtf.Append(@"\trrh3000"); 
     tableRtf.Append(@"\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs"); 
     tableRtf.Append(@"\cellx3000"); 

     tableRtf.Append(@"\intbl \cell \row"); 

     tableRtf.Append(@"\pard"); 
     tableRtf.Append(@"}"); 

     string combined2 = tableRtf.ToString(); 
     string combined1 = this.TextEditor.Rtf.ToString(); 


     tableRtf.AppendLine(tableRtf.ToString()); 

     TextEditor.Select(TextEditor.TextLength, 0); 
     TextEditor.SelectedRtf = tableRtf.ToString(); 

這將在圍繞着你在其中輸入文本的單元格的格式字符串,你可以很容易地改變字體裏面,使用\ trrh節目單元格的高度,它都可以調整大小在Windows窗體程序中也是如此如在Word中輸出時一樣。最初,當導出到Word是不可見的,所以我說的tableRtf.Append(@ 「\ clbrdrt \ brdrw15 \ brdrs \ clbrdrl \ brdrw15 \ brdrs \ clbrdrb \ brdrw15 \ brdrs \ clbrdrr \ brdrw15 \ brdrs」);行,它被賦予了Word識別的字體。最重要的是,在表格內輸入內容並按Enter鍵創建新行時,單元格會自動調整其大小以適應內容。

相關問題