0
그래서 저는 좋아하는 언어를위한 간단한 코드 편집기를 작성하고 있습니다. 나는 구문의 고역이 매우 잘 진행되고있다. 문제는 내가 텍스트로 돌아 가기 전에 필자가 작성한 것이므로, 포인터를 지나서 모든 것이 고조되는 것을 완전히 망쳐 놓는다는 것입니다. 여기에 내 코드, 너무 많은 게시에 대한 내 사과입니다 : 도움을C# 코드 편집기 작성 문제
public partial class Form1 : Form
{
public string MainFontName = "Courier New";
public int MainFontSize = 12;
public Color MainFontColor = Color.Black;
[DllImport("user32.dll")] // import lockwindow to remove flashing
public static extern bool LockWindowUpdate(IntPtr hWndLock);
public Regex codeFunctions = new Regex("draw_line|draw_rectangle|draw_circle");
public Regex codeKeywords = new Regex("and|for|while|repeat|or|xor|exit|break|case|switch|if|then|with|true|false");
public Form1()
{
InitializeComponent();
CodeInput.Font = new Font(MainFontName, MainFontSize, FontStyle.Regular);
}
private void CodeInput_TextChanged(object sender, EventArgs e)
{
CodeInput.Font = new Font(MainFontName, MainFontSize, FontStyle.Regular);
try
{
LockWindowUpdate(CodeInput.Handle);
int selPos = CodeInput.SelectionStart;
CodeInput.Select(0, CodeInput.TextLength);
CodeInput.SelectionFont = new Font(MainFontName, MainFontSize, FontStyle.Regular);
CodeInput.SelectionColor = Color.Black;
CodeInput.SelectionLength = 0;
CodeInput.SelectionStart = selPos;
//Match the functions
foreach (Match keyWordMatch in codeFunctions.Matches(CodeInput.Text))
{
CodeInput.Select(keyWordMatch.Index, keyWordMatch.Length);
CodeInput.SelectionColor = Color.Red;
CodeInput.SelectionStart = selPos;
CodeInput.SelectionColor = MainFontColor;
CodeInput.SelectionLength = 0;
}
// Match the keywords
foreach (Match keyWordMatch in codeKeywords.Matches(CodeInput.Text))
{
Font oFont = new Font(MainFontName, MainFontSize, FontStyle.Bold);
Font nFont = new Font(MainFontName, MainFontSize, FontStyle.Regular);
CodeInput.Select(keyWordMatch.Index, keyWordMatch.Length);
CodeInput.SelectionColor = Color.Blue;
CodeInput.SelectionFont = oFont;
CodeInput.SelectionStart = selPos;
CodeInput.SelectionColor = MainFontColor;
CodeInput.SelectionFont = nFont;
CodeInput.SelectionLength = 0;
}
}
finally
{
LockWindowUpdate(IntPtr.Zero);
}
}
}
감사합니다.
포인터와 win32 API 호출이 깜박임을 중지하겠습니까? 레이아웃 작업을 일시 중지하지 않습니까? –
[미치 (Mitch)의 말] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout.aspx). –
오, 나는 suspendlayout에 대해 들어 본 적이 없었습니다. 고마워요. 내 문제가 뭔지 생각해? – pajm