/// <summary> /// 改变内容和光标移动,并进行提示 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PLCCodeEditor_SelChange(object sender, ICodeSenseEvents_SelChangeEvent e) { //this.CreateGraphics().FillEllipse(Brushes.Red, new Rectangle(0, 0, 10, 10)); //选择和行号不变:不作格式化 if (lastLineNumber == GetCaretLineNumber()) { lastTokenType = CurrentToken; // After edit Token will be changed return; } if (SelLength != 0) { lastLineNumber = GetCaretLineNumber(); lastTokenType = CurrentToken; return; } string formatedText = FormatRow(lastLineNumber, true, false); string noFormatedText = GetLine(lastLineNumber); if (formatedText == noFormatedText) //出错没进行格式化 { lastLineNumber = GetCaretLineNumber(); lastTokenType = CurrentToken; return; } Position position = GetCaretPosition(); //先保存实际的Caret,一删一加Caret变了,Token也会变 int length = (formatedText.Length > noFormatedText.Length) ? formatedText.Length : noFormatedText.Length; ReplaceText(formatedText, GetLineRange(lastLineNumber, GetLineLength(lastLineNumber))); //获取当前行的字符数,不能超过,否则会有溢出 SetCaretPos(position.LineNo, position.ColNo); //还原Caret lastLineNumber = GetCaretLineNumber(); //当前行变为上一行 lastTokenType = CurrentToken; }
// 格式化 private void Format() { //选择和行号不变:不作格式化 //if (lastLineNumber == GetCaretLineNumber()) // return; if (SelLength != 0) { lastLineNumber = GetCaretLineNumber(); lastTokenType = CurrentToken; return; } string formatedText = FormatRow(lastLineNumber, true, false); string noFormatedText = GetLine(lastLineNumber); if (formatedText == noFormatedText) //出错没进行格式化 { lastLineNumber = GetCaretLineNumber(); lastTokenType = CurrentToken; return; } Position position = GetCaretPosition(); //先保存实际的Caret,一删一加Caret变了,Token也会变 int length = (formatedText.Length > noFormatedText.Length) ? formatedText.Length : noFormatedText.Length; ReplaceText(formatedText, GetLineRange(lastLineNumber, GetLineLength(lastLineNumber))); //获取当前行的字符数,不能超过,否则会有溢出 SetCaretPos(position.LineNo, position.ColNo); //还原Caret lastLineNumber = GetCaretLineNumber(); //当前行变为上一行 lastTokenType = CurrentToken; }