整理 如何做乙個語法著色控制項

2022-04-30 17:33:12 字數 1894 閱讀 3849

很多ide或者開發工具中都有語法著色的功能,這是如何實現的呢?筆者試著用c#做了乙個sample,基本上實現此功能。

本文一半是原創,一半是參考國外的論壇

語法著色器,實際上只做了兩件事情:「接受使用者輸入」以及「改變關鍵字字型屬性」。

c#自帶的控制項中能夠滿足需求的首推「richtextbox」,筆者在網上經常看到很多同行都以此為基礎,製作出類似ms-word的種種效果。既然,複雜的word效果都能夠實現,那麼語法著色自然也就不在話下。

這一點還可分成三個更小的工作:關鍵字列表、判斷關鍵字、定義字型屬性。

關鍵字列表很簡單,乙個list即可滿足需求。

這裡以基本sql語句為例。

private ilist_keywords = new list()

;

判斷關鍵字

為了在使用者輸入時能夠立即對所輸入的內容有所反映,我們需要override一下richtextbox的ontextchanged()方法。

其他屬性及方法介紹請參考msdn

筆者的演算法很簡單,遍歷業已定義好的關鍵字列表,用其與使用者輸入的內容進行比較,如果發現相同,則按照字元的index值計算編輯區域。

定義字型屬性

在c#中有乙個叫做font的類能夠滿足需求。

其他屬性及方法介紹請參考msdn

筆者在嘗試的過程中發現螢幕中顯示的內容會隨著使用者的輸入,出現閃爍。究其原因可能是因為windows一直在重新繪製視窗造成的,為了迴避這個問題,我們可以使用suspendlayout()和resumelayout()暫停和恢復畫面重新繪製的過程。

做完這幾步,我們的語法著色控制項也就大功告成了。下面是全部源**。在vs2008 express版本上除錯通過。

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.windows.forms;

using system.text.regularexpressions;

using system.drawing;

using system.componentmodel;

namespace base

; [categoryattribute("keywords"), description("關鍵字列表")]

public ilistkeywords

set}

/// /// 關鍵字顏色(預設為藍色)

///

private color _keywordscolor = color.blue;

[categoryattribute("keywordscolor"), description("關鍵字顏色")]

public color keywordscolor

set}

// todo 數字,字串屬性

/// /// 分隔符

///

regex tokens = new regex(@"[\s\r\n\t\(\)\;]");

/// /// 接受輸入時語法著色

///

///

protected override void ontextchanged(eventargs e)

}// break;}}

// 計算輸入點的位置,如果不在末尾,則說明使用者在修改前面的內容,否則將焦點移到末尾

this.selectionstart = (inputpoint < this.text.length) ? inputpoint : this.text.length;

this.selectionlength = 0;

resumelayout();}}

}

如何做乙個專案

早上上csdn瞧瞧,發現有位同學想在暑期做個論壇,想要點建議,相信有不少已經入門想有所提高的同學都有這個想法。那麼我就在此提幾點意見,大家可以討論討論。首先選專案,我覺得這位同學拿論壇入手是比較合適的,原因有這樣幾點 1 論壇的基本業務邏輯大家都很熟悉2 量不是很大,可以在兩個月內完成基本功能的實現...

如何做乙個快樂的人

人,要做乙個明白人。所謂明白人,既能努力改變環境,更能努力改變心境。改變環境靠聰明,改變心境靠智慧型。智慧型的人能悟出人生真諦,把握生活方向,知道自己的根本追求,不會為了一點瑣事而惱。開心的前提是愛心。所謂愛心,可理解為乙個人要有愛人之善心,也可理解為人要愛自己的心。通過修身養性,純潔心靈,隨時調控...

如何做乙個有趣的人

1 不善表達是能力不行 儲備太少 不是性格內向 請不要自欺欺人咯 這句話至少對於自己完全沒毛病。2 極簡主義 衣服不要多,但要有質感。朋友不要多,但要有交情。資訊不要多,但都很重要。讀書不必多,但要有深度。東西不必多,但要用得著。3 作者對極簡主義的理解 不對這個泛泛的世界投注太多的感情 太多的時間...