Alsing.SyntaxBox代码文本编辑控件使用小记【C# Nuget程序包】

       Nuget地址:https://www.nuget.org/packages/Alsing.SyntaxBox/2.0.1#show-readme-container

        版本:2.0.1(不同版本使用方法可能会有不同)

        最近在做一个Winform代码生成工具类的项目,需要有个文本框控件来编辑代码,并且有某些规则下字体高亮、关键字高亮的需求。首先尝试了下自己在用的控件库,要不就是太丑要不就是某些参数方法已经被魔改导致用不了。但是吧我人又懒,不想自己琢磨做控件(其实是没那个能力)。遂找到了如下知乎:

        (32 条消息) C#有没有代码高亮的文本框控件? - 知乎 (zhihu.com)

        知乎大佬总是那么给力,分别从不同开发方式推荐了好几款代码文本编辑控件。其中Alsing.SyntaxBox这款控件直到去年(2023)都一直有更新,而且Nuget可以直接下载安装程序包,非常方便,随后便开始研究如何使用。

        控件的使用方法写在github和nuget的主页上。

        1.将"SyntaxBoxControl"和"SyntaxDocument"两个控件拖到form的设计界面上。其中box是代码实际编辑的界面,document存储了代码高亮的规则syn文件。(其实就是xml文件,但是后缀不用.syn会发现根本没反应......)

        2.将document控件关联到box。实际只需要在代码中的初始化添加一句

    SyntaxBoxControl1.Document = SyntaxDocument1;

 或是在SyntaxBoxControl1的属性中将Document项填写为SyntaxDocument的“Name”属性即可。

        3.填写document的syntaxfile路径。即填写SyntaxDocument的syntaxFile(代码高亮规则文件路径)属性。可在代码中修改:

    SyntaxDocument1.SyntaxFile = "csharp.syn";

也可在属性项修改。

        如果控件的作用是编辑主流编程语言,那在作者的SyntaxFiles文件夹找syn文件直接使用即可。如下图所示:

        如果有自己的规则则可以修改或新建syn文件,将自己的规则写进。具体可以研究一下xml文件的编辑方法和作者提供的syn文件,参照他的格式来写就可以。其中一些如关键字“keywords”等不能修改,对应的style必须申明等,这些规则需要自己慢慢去试。以下为我根据自己需求修改的XML.syn: 

<?xml version="1.0" encoding="utf-8" ?>
<Language Name="XML" Startblock="text">
	<FileTypes>
		<FileType Extension=".xml" Name="XML file" />
		<FileType Extension=".xsl" Name="XSL/XSLT file" />
		<FileType Extension=".res" Name="RES file" />
		<FileType Extension=".syn" Name="Compona Syntax file" />
		<FileType Extension=".config" Name=".NET Config file" />
		<FileType Extension=".csproj" Name="C# Project file" />
	</FileTypes>
	<Block Name="text" Style="text" EscapeChar="" IsMultiline="true">
		<Keywords></Keywords>
		<Operators>
			<PatternGroup Name="HTML Chars" Style="HTML Chars">
				<Pattern Text="&amp;AElig;" />
				<Pattern Text="&amp;Aacute;" />
				<Pattern Text="&amp;Acirc;" />
				<Pattern Text="&amp;Agrave;" />
				<Pattern Text="&amp;Aring;" />
				<Pattern Text="&amp;Atilde;" />
				<Pattern Text="&amp;Auml;" />
				<Pattern Text="&amp;Ccedil;" />
				<Pattern Text="&amp;ETH;" />
				<Pattern Text="&amp;Eacute;" />
				<Pattern Text="&amp;Ecirc;" />
				<Pattern Text="&amp;Egrave;" />
				<Pattern Text="&amp;Euml;" />
				<Pattern Text="&amp;Iacute;" />
				<Pattern Text="&amp;Icirc;" />
				<Pattern Text="&amp;Igrave;" />
				<Pattern Text="&amp;Iuml;" />
				<Pattern Text="&amp;Ntilde;" />
				<Pattern Text="&amp;Oacute;" />
				<Pattern Text="&amp;Ocirc;" />
				<Pattern Text="&amp;Ograve;" />
				<Pattern Text="&amp;Oslash;" />
				<Pattern Text="&amp;Otilde;" />
				<Pattern Text="&amp;Ouml;" />
				<Pattern Text="&amp;THORN;" />
				<Pattern Text="&amp;Uacute;" />
				<Pattern Text="&amp;Ucirc;" />
				<Pattern Text="&amp;Ugrave;" />
				<Pattern Text="&amp;Uuml;" />
				<Pattern Text="&amp;Yacute;" />
				<Pattern Text="&amp;aacute;" />
				<Pattern Text="&amp;acirc;" />
				<Pattern Text="&amp;acute;" />
				<Pattern Text="&amp;aelig;" />
				<Pattern Text="&amp;agrave;" />
				<Pattern Text="&amp;amp;" />
				<Pattern Text="&amp;aring;" />
				<Pattern Text="&amp;atilde;" />
				<Pattern Text="&amp;auml;" />
				<Pattern Text="&amp;brvbar;" />
				<Pattern Text="&amp;ccedil;" />
				<Pattern Text="&amp;cedil;" />
				<Pattern Text="&amp;cent;" />
				<Pattern Text="&amp;copy;" />
				<Pattern Text="&amp;curren;" />
				<Pattern Text="&amp;deg;" />
				<Pattern Text="&amp;divide;" />
				<Pattern Text="&amp;eacute;" />
				<Pattern Text="&amp;ecirc;" />
				<Pattern Text="&amp;egrave;" />
				<Pattern Text="&amp;eth;" />
				<Pattern Text="&amp;euml;" />
				<Pattern Text="&amp;frac12;" />
				<Pattern Text="&amp;frac14;" />
				<Pattern Text="&amp;frac34;" />
				<Pattern Text="&amp;gt;" />
				<Pattern Text="&amp;iacute;" />
				<Pattern Text="&amp;icirc;" />
				<Pattern Text="&amp;iexcl;" />
				<Pattern Text="&amp;igrave;" />
				<Pattern Text="&amp;iquest;" />
				<Pattern Text="&amp;iuml;" />
				<Pattern Text="&amp;laquo;" />
				<Pattern Text="&amp;lt;" />
				<Pattern Text="&amp;macr;" />
				<Pattern Text="&amp;micro;" />
				<Pattern Text="&amp;middot;" />
				<Pattern Text="&amp;nbsp;" />
				<Pattern Text="&amp;not;" />
				<Pattern Text="&amp;ntilde;" />
				<Pattern Text="&amp;oacute;" />
				<Pattern Text="&amp;ocirc;" />
				<Pattern Text="&amp;ograve;" />
				<Pattern Text="&amp;ordf;" />
				<Pattern Text="&amp;ordm;" />
				<Pattern Text="&amp;oslash;" />
				<Pattern Text="&amp;otilde;" />
				<Pattern Text="&amp;ouml;" />
				<Pattern Text="&amp;para;" />
				<Pattern Text="&amp;plusmn;" />
				<Pattern Text="&amp;pound;" />
				<Pattern Text="&amp;quot;" />
				<Pattern Text="&amp;raquo;" />
				<Pattern Text="&amp;reg;" />
				<Pattern Text="&amp;sect;" />
				<Pattern Text="&amp;shy;" />
				<Pattern Text="&amp;sup1;" />
				<Pattern Text="&amp;sup2;" />
				<Pattern Text="&amp;sup3;" />
				<Pattern Text="&amp;szlig;" />
				<Pattern Text="&amp;thorn;" />
				<Pattern Text="&amp;times;" />
				<Pattern Text="&amp;uacute;" />
				<Pattern Text="&amp;ucirc;" />
				<Pattern Text="&amp;ugrave;" />
				<Pattern Text="&amp;uml;" />
				<Pattern Text="&amp;uuml;" />
				<Pattern Text="&amp;yacute;" />
				<Pattern Text="&amp;yen;" />
				<Pattern Text="&amp;yuml;" />
			</PatternGroup>
		</Operators>
		<ChildBlocks>
			<Child Name="ASP Header" />
			<Child Name="ASP" />
			<Child Name="PHP" />
			<Child Name="HTML Comment" />
			<Child Name="HTML gnu" />
			<Child Name="HTML StyleMain" />
			<Child Name="HTML JavaScriptMain" />
			<Child Name="HTML Tag" />
		</ChildBlocks>
	</Block>


<Block Name="HTML JavaScriptMain" Style="HTML JavaScript" IsMultiline="true" TerminateChildren="true" BackColor="WhiteSmoke">
		<Scope Start="&lt;script language=&quot;javascript&quot;&gt;" End="&lt;/script&gt;" Style="HTML JavaScript Pattern" Text="&lt;Script&gt;" SpawnBlockOnStart="HTML JavaScript" />
	</Block>
	<Block Name="HTML StyleMain" Style="HTML Style" IsMultiline="true" TerminateChildren="true">
		<Scope Start="&lt;Style&gt;" End="&lt;/Style&gt;" Style="HTML Style Pattern" Text="&lt;Style&gt;" />
		<ChildBlocks>
			<Child Name="ASP" />
			<Child Name="HTML Style Comment" />
			<Child Name="HTML Style" />
		</ChildBlocks>
	</Block>
	<Block Name="HTML Style" Style="HTML Style Attrib" IsMultiline="true" TerminateChildren="true">
		<Scope Start="{" End="}" Style="HTML Style" Text="{...}" />
		<ChildBlocks>
			<Child Name="ASP" />
			<Child Name="HTML Style Comment" />
			<Child Name="HTML Style Value" />
		</ChildBlocks>
	</Block>
	<Block Name="HTML Style Value" Style="HTML Style Value" IsMultiline="true">
		<Scope Start=":" End=";" Style="HTML Style Value" Text=":...;" />
		<ChildBlocks>
			<Child Name="ASP" />
			<Child Name="HTML Style Comment" />
		</ChildBlocks>
	</Block>
	<Block Name="HTML Style Comment" Style="HTML Comment" IsMultiline="true">
		<Scope Start="/*" End="*/" Style="HTML Comment" Text="/*...*/" />
		<ChildBlocks>
			<Child Name="ASP" />
		</ChildBlocks>
	</Block>
	<Block Name="HTML JavaScript" Style="HTML JavaScript" IsMultiline="true">
		<Scope Start="{" End="}" Style="" Text="{...}" />
		<Keywords>
			<PatternGroup Name="Keywords" Style="ASP Keywords">
				<Patterns>
boolean
break byte
case catch char class const continue
debugger default delete do double
else enum export extends
false final finally float for function 
goto
if implements import in instanceof int interface
long
native new null
package private protected public
return
short static super switch synchronized
this throw throws transient true try typeof
var void volatile
while with


				</Patterns>
			</PatternGroup>
			<PatternGroup Name="Functions" Style="ASP Functions">
				<Patterns>
abs acos alert anchor apply asin atan atan2 atob attachEvent
back big blink blur bold borderWidths btoa
call captureEvents ceil charAt charCodeAt clear clearInterval clearTimeout click close compile concat confirm contextual cos createElement createEventObject createPopup createStyleSheet createTextNode
detachEvent disableExternalCapture dump
elementFromPoint enableExternalCapture escape eval exec execCommand execScript exp
fileCreatedDate fileModifiedDate fileSize fileUpdatedDate find firstChild fixed floor focus fontcolor fontsize fromCharCode forward
getAttention getDate getDay getElementById getElementsByName getElementsByTagName getFullYear getHours getMilliseconds getMinutes getMonth getSeconds getSelection getTime getTimezoneOffset getUTCDate getUTCDay getUTCFullYear getUTCHours getUTCMilliseconds getUTCMinutes getUTCMonth getUTCSeconds getYear go
handleEvent home
indexOf isFinite isNaN italics
javaEnabled join
lastIndexOf link load log
margins match max mergeAttributes min moveAbove moveBelow moveBy moveTo moveToAbsolute
navigate 
open
paddings parse parseFloat parseInt plugins.refresh pop pow preference print prompt push
queryCommandEnabled queryCommandIndeterm queryCommandState queryCommandValue
random recalc releaseCapture releaseEvents reload replace reset resizeBy resizeTo returnValue reverse round routeEvents
savePreferences scroll scrollBy scrollByLines scrollByPages scrollTo scrollX scrollY search select setDate setFullYear setActive setCursor setHotKeys setHours setInterval setMilliseconds setMinutes setMonth setResizable setSeconds setTime setTimeout setUTCDate setUTCFullYear setUTCHours setUTCMilliseconds setUTCMinutes setUTCMonth setUTCSeconds setYear setZOptions shift showHelp showModalDialog showModelessDialog sidebar sin signText sizeToContent slice small sort splice split sqrt strike stop sub submit substr substring sup
taint taintEnabled tan test toGMTString toLocaleString toLowerCase toSource toString toUpperCase toUTCString 
UTC
unescape unshift untaint updateCommands unwatch
valueOf
watch write writeln

				</Patterns>
			</PatternGroup>
		</Keywords>
		<Operators>
			<PatternGroup Name="Operators2" Style="ASP Comment">
				<Pattern Text="--&gt;" />
				<Pattern Text="&lt;!--" />
			</PatternGroup>
			<PatternGroup Name="Operators" Style="Javascript Operators">
				<Pattern Text="+" />
				<Pattern Text="-" />
				<Pattern Text="*" />
				<Pattern Text="/" />
				<Pattern Text="^" />
				<Pattern Text="." />
				<Pattern Text=":" />
				<Pattern Text=";" />
				<Pattern Text="=" />
				<Pattern Text="&gt;" />
				<Pattern Text="&lt;" />
				<Pattern Text="&amp;" />
				<Pattern Text="|" />
			</PatternGroup>
			<PatternGroup Name="Comment" Style="ASP Comment">
				<Pattern Text="'[a-z,A-Z,0-9 ]*" IsComplex="true" />
			</PatternGroup>
		</Operators>
		<ChildBlocks>
			<Child Name="HTML JavaScript" />
			<Child Name="Script String" />
			<Child Name="Script String2" />
			<Child Name="Script MultiComment" />
			<Child Name="ASP" />
		</ChildBlocks>
	</Block>
	<!-- this block is the HTML tags in HTML comments-->
	<Block Name="HTML Tag" Style="HTML Tag" EscapeChar="" IsMultiline="true">
		<Scope Start="&lt;" End="&gt;" Style="HTML Tag Pattern" Text="&lt;...&gt;" />
		<Operators>
			<PatternGroup Name="HTML Attrib" Style="HTML Attrib">
				<!-- operator is the attributes that can exist within HTML tags-->
				<Pattern Text="(\s[a-zA-Z:]+)" IsComplex="true" />
			</PatternGroup>
		</Operators>
		<ChildBlocks>
			<Child Name="ASP" />
			<Child Name="HTML String" />
		</ChildBlocks>
	</Block>
	<Block Name="HTML String" Style="HTML String" EscapeChar="" IsMultiline="false">
		<Scope Start="&quot;" End="&quot;" Style="HTML String Pattern" Text="" />
		<ChildBlocks>
			<Child Name="ASP" />
		</ChildBlocks>
	</Block>
	<Block Name="HTML Comment" Style="HTML Comment" EscapeChar="" IsMultiline="true">
		<Scope Start="&lt;!--" End="--&gt;" Style="HTML Comment" Text="&lt;!--...--&gt;" />
		<ChildBlocks>
			<Child Name="ASP" />
		</ChildBlocks>
	</Block>
	<Block Name="HTML gnu" Style="HTML gnu" EscapeChar="" IsMultiline="true">
		<Scope Start="&lt;!" End="&gt;" Style="HTML Tag Pattern" Text="&lt;!...&gt;" />
	</Block>
	<Block Name="ASP Header" Style="ASP Pattern" EscapeChar="" IsMultiline="true">
		<Scope Start="&lt;%@" End="%&gt;" Style="ASP Pattern" Text="&lt;%@...%&gt;" />
	</Block>
	<!--ASP ASP ASP ASP -->
	<Block Name="ASP" Style="ASP" EscapeChar="" IsMultiline="true" TerminateChildren="true">
		<Keywords>
			<PatternGroup Name="Keywords" Style="ASP Keywords">
				<Pattern Text="End Function" IsSeparator="true" />
				<Pattern Text="End Sub" IsSeparator="true" />
				<Pattern Text="End Property" IsSeparator="true" />
				<Patterns>
And As
Call Case Class Const
Dim Do
Each Else ElseIf Empty End Eqv Erase Error Execute Exit Explicit
For Function
Get Goto
If Imp Is
Let Loop
Mod
Next New Not Nothing Null
On Option Or
Private Property Public
Randomize ReDim Rem Resume
Select Set Stop Sub
Then To 
Until
Wend While With
True False


				</Patterns>
			</PatternGroup>
			<PatternGroup Name="Functions" Style="ASP Functions">
				<Patterns>
Server Request Response Session Application
				</Patterns>
			</PatternGroup>
		</Keywords>
		<Operators>
			<PatternGroup Name="Operators" Style="ASP Operators">
				<Pattern Text="+" />
				<Pattern Text="-" />
				<Pattern Text="*" />
				<Pattern Text="/" />
				<Pattern Text="^" />
				<Pattern Text="." />
				<Pattern Text="=" />
				<Pattern Text="&gt;" />
				<Pattern Text="&lt;" />
			</PatternGroup>
		</Operators>
		<Scope Start="&lt;%" End="%&gt;" Style="ASP Pattern" Text="&lt;%...%&gt;" />
		<ChildBlocks>
			<Child Name="ASP String" />
			<Child Name="ASP Comment" />
		</ChildBlocks>
	</Block>
	<Block Name="ASP String" Style="ASP String" EscapeChar="" IsMultiline="false">
		<Scope Start="&quot;" End="&quot;" Style="ASP String" Text="" />
	</Block>
	<Block Name="ASP Comment" Style="ASP Comment" EscapeChar="" IsMultiline="false">
		<Scope Start="'" End="" Style="ASP Comment" Text="" IsMultiline="false" />
	</Block>
	<Block Name="Script String" Style="Script String" EscapeChar="" IsMultiline="false">
		<Scope Start="'" End="'" Style="Script String" Text="" />
	</Block>
	<Block Name="Script String2" Style="Script String" EscapeChar="" IsMultiline="false">
		<Scope Start="&quot;" End="&quot;" Style="Script String" Text="" />
	</Block>
	<Block Name="TokenList" Style="Token Code" EscapeChar="" IsMultiline="true">
		<Keywords>
			<PatternGroup Name="Tokens" Style="Token1Style" CaseSensitive="true">
				<Pattern Text="$11$" IsSeparator="true" />
			</PatternGroup>
		</Keywords>
	</Block>

	<Style Name="TokenList" ForeColor="" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="Token1Style" ForeColor="Blue" BackColor="" Bold="true" Italic="false" Underline="false" />
	<Block Name="Script MultiComment" Style="Script Comment" EscapeChar="" IsMultiline="true">
		<Scope Start="/*" End="*/" Style="Script Comment" Text="/*...*/" />
	</Block>
	

	
	<Style Name="Text" ForeColor="Black" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML Tag" ForeColor="DarkRed" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML Tag Pattern" ForeColor="Blue" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML String Pattern" ForeColor="blue" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML String" ForeColor="blue" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML Attrib" ForeColor="red" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML Comment" ForeColor="green" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML gnu" ForeColor="magenta" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML Style" ForeColor="DarkRed" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML Style Pattern" ForeColor="black" BackColor="yellow" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML Style Attrib" ForeColor="Red" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML Style Value" ForeColor="Blue" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="ASP" ForeColor="black" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="ASP Pattern" ForeColor="black" BackColor="Yellow" Bold="false" Italic="false" Underline="false" />
	<Style Name="ASP Operators" ForeColor="red" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="ASP Keywords" ForeColor="blue" BackColor="" Bold="true" Italic="false" Underline="false" />
	<Style Name="ASP Functions" ForeColor="DarkBlue" BackColor="" Bold="true" Italic="false" Underline="false" />
	<Style Name="ASP Comment" ForeColor="green" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="ASP String" ForeColor="Teal" BackColor="" Bold="true" Italic="false" Underline="false" />
	<Style Name="HTML Chars" ForeColor="red" BackColor="" Bold="true" Italic="false" Underline="false" />
	<Style Name="HTML JavaScript Pattern" ForeColor="black" BackColor="Yellow" Bold="false" Italic="false" Underline="false" />
	<Style Name="HTML JavaScript" ForeColor="black" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="Script Operators" ForeColor="red" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="Script Comment" ForeColor="green" BackColor="" Bold="false" Italic="false" Underline="false" />
	<Style Name="Script String" ForeColor="Teal" BackColor="" Bold="true" Italic="false" Underline="false" />
</Language>

        以下是我根据自己的需求实现的最终效果:

希望对你有所帮助。

---------------------------------------------------------------------------------------------------------------------------------

2024/9/23编辑更新:

        应网友需求,我把该控件我目前试过可以显示的颜色公布一下。

红色 red
橙色 orange
黄色 yellow
绿色 green 
亮绿色 lime 
灰绿色 LimeGreen 
蓝色 Blue 
青色 Cyan 
蓝绿色 teal 
蓝绿色 navy
古典白色 AntiqueWhite
紫红色 Magenta/fuchsia 
黑色 Black
浅绿色 Aquamarine 
蓝紫色 BlueViolet
棕色 Brown
灰色 gray
橄榄绿色 olive
草绿色 OliveDrab
紫色 purple
银色 silver

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值