前段時間想寫richtextbox的代碼折行,可是網上沒有搜到,只看到了一個FastColoredTextBox還不支持中文,
這幾天忽然搜索文本編輯器看到一個編譯器,SharpDevelop 5.1,而後看到裏面有一個組件TextEditor,
試了試支持中文也能代碼折行,因此有時候作不出來能夠先放一放,指不定何時看到什麼就作出來了。編輯器
/// <summary> /// @@ 折行 /// </summary> /// <param name="document"></param> /// <param name="fileName"></param> /// <param name="parseInformation"></param> /// <returns></returns> public List<FoldMarker> GenerateFoldMarkers(IDocument document, string fileName, object parseInformation) { List<FoldMarker> list = new List<FoldMarker>(); var startLines = new Stack<int>(); for (int i = 0; i < document.TotalNumberOfLines; i++) { // Get the text of current line. string text = document.GetText(document.GetLineSegment(i)); if (text.Trim().Length >= 2 && text.Trim().Substring(0, 2) == "@@") // Look for method starts { if (flag == false) { if (startLines.Count > 0) { int start = startLines.Pop(); // 判斷相鄰兩行是否都有標籤 if (start == i - 1) { startLines.Push(start); } else { if (count < 30) { list.Add(new FoldMarker(document, start, document.GetLineSegment(start).Length, i - 1, 57, FoldType.TypeBody, "...}", true)); } else { list.Add(new FoldMarker(document, start, document.GetLineSegment(start).Length, i - 1, 57, FoldType.TypeBody, "...}", false)); } count++; } } startLines.Push(i); } else { flag = false; startLines.Push(i); } } } return list; } private int count = 0; //是不是第一個標籤 private bool flag = true; /// <summary> /// 保存 /// </summary> /// <param name="msg"></param> /// <param name="keyData"></param> /// <returns></returns> protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, Keys keyData) { if (keyData == (Keys.Control | Keys.S)) { textEditor.SaveFile(filename); //return base.ProcessCmdKey(ref msg, keyData); } else if (keyData == Keys.F5) { textEditor.LoadFile(filename); } return base.ProcessCmdKey(ref msg, keyData); }