2016-03-08 84 views
5

我正在使用ScinctillaNET编辑器,并且,我遇到的问题是它不显示方法的“[+]”和“[ - ]折叠符号,在至少对于Vb.Net词法分析器如图此图像中:ScintillaNET不显示折叠的方法块

(注意到行号和丢失符号) enter image description here

我不知道I'f其设计在作者的包装中出现问题,或者是我的错,这是我构建的风格ng,用Vb.Net编写:

Public Shared Sub SetVbNetStyle(ByVal editor As Scintilla) 

    Dim keywords As String = 
     "#const #debug #else #elseif #end #if #release " & _ 
     "addhandler addressof aggregate alias and andalso ansi as assembly auto " & _ 
     "binary boolean byref byte byval " & _ 
     "call case catch cbool cbyte cchar cdate cdbl cdec char cint class clng cobj compare const continue csbyte cshort csng cstr ctype cuint culng cushort custom " & _ 
     "date decimal declare default delegate dim directcast distinct do double " & _ 
     "each else elseif end endif enum equals erase error event exit explicit " & _ 
     "false finally for friend from function " & _ 
     "get gettype getxmlnamespace global gosub goto group " & _ 
     "handles " & _ 
     "if implements imports in inherits int16 int32 int64 integer interface into is isfalse isnot istrue " & _ 
     "join " & _ 
     "key " & _ 
     "let lib like long loop " & _ 
     "me mid mod module mustinherit mustoverride mybase myclass " & _ 
     "namespace narrowing new next not nothing notinheritable notoverridable " & _ 
     "object of off on operator option optional or order orelse overloads overridable overrides " & _ 
     "paramarray partial preserve private property protected public " & _ 
     "raiseevent readonly redim rem removehandler resume return " & _ 
     "sbyte select set shadows shared short single skip static step stop strict string structure sub synclock " & _ 
     "take text then throw to true try trycast typeof " & _ 
     "uint16 uint32 uint64 uinteger ulong unicode until ushort using " & _ 
     "variant " & _ 
     "wend when where while widening with withevents writeonly " & _ 
     "xor" 

    ' Reset the styles. 
    editor.StyleResetDefault() 
    editor.StyleClearAll() 
    ' editor.Styles(Style.[Default]).Font = "Consolas" 
    ' editor.Styles(Style.[Default]).Size = 10 

    ' Set the Vb.Net lexer. 
    editor.Lexer = Lexer.Vb 

    ' Set folding properties. 
    editor.SetProperty("tab.timmy.whinge.level", "1") 
    editor.SetProperty("fold", "1") 

    ' Set the margin for fold markers. 
    With editor 
     .Margins(2).Type = MarginType.Symbol 
     .Margins(2).Mask = Marker.MaskFolders 
     .Margins(2).Sensitive = True 
     .Margins(2).Width = 20 
    End With 

    ' Reset folder markers. 
    For i As Integer = Marker.FolderEnd To Marker.FolderOpen 
     editor.Markers(i).SetForeColor(SystemColors.ControlLightLight) 
     editor.Markers(i).SetBackColor(SystemColors.ControlDark) 
    Next 

    ' Set the style of the folder markers. 
    With editor 
     .Markers(Marker.Folder).Symbol = MarkerSymbol.BoxPlus 
     .Markers(Marker.Folder).SetBackColor(SystemColors.ControlText) 
     .Markers(Marker.FolderOpen).Symbol = MarkerSymbol.BoxMinus 
     .Markers(Marker.FolderEnd).Symbol = MarkerSymbol.BoxPlusConnected 
     .Markers(Marker.FolderEnd).SetBackColor(SystemColors.ControlText) 
     .Markers(Marker.FolderMidTail).Symbol = MarkerSymbol.TCorner 
     .Markers(Marker.FolderOpenMid).Symbol = MarkerSymbol.BoxMinusConnected 
     .Markers(Marker.FolderSub).Symbol = MarkerSymbol.VLine 
     .Markers(Marker.FolderTail).Symbol = MarkerSymbol.LCorner 
    End With 

    ' Enable automatic folding 
    editor.AutomaticFold = (AutomaticFold.Show Or AutomaticFold.Click Or AutomaticFold.Change) 

    ' Disable whitespaces visibility. 
    editor.ViewWhitespace = WhitespaceMode.Invisible 

    ' Set the style of the Vb.Net language. 
    With editor 
     .Styles(Style.Default).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Comment).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Comment).ForeColor = Color.FromArgb(255, 87, 159, 56) 
     .Styles(Style.Vb.Comment).Italic = False 
     .Styles(Style.Vb.CommentBlock).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.CommentBlock).ForeColor = Color.FromArgb(127, 127, 127) 
     .Styles(Style.Vb.CommentBlock).Italic = True 
     .Styles(Style.Vb.Default).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Default).ForeColor = Color.FromArgb(128, 128, 128) 
     .Styles(Style.Vb.HexNumber).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.HexNumber).Bold = True 
     .Styles(Style.Vb.HexNumber).ForeColor = Color.FromArgb(255, 181, 206, 168) 
     .Styles(Style.Vb.Identifier).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Identifier).ForeColor = Color.Gainsboro 
     .Styles(Style.Vb.Keyword).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Keyword).Bold = False 
     .Styles(Style.Vb.Keyword).ForeColor = Color.FromArgb(255, 54, 139, 214) 
     .Styles(Style.Vb.Keyword2).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Keyword2).Bold = False 
     .Styles(Style.Vb.Keyword2).ForeColor = Color.FromArgb(255, 54, 139, 214) 
     .Styles(Style.Vb.Keyword3).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Keyword3).Bold = False 
     .Styles(Style.Vb.Keyword3).ForeColor = Color.FromArgb(255, 54, 139, 214) 
     .Styles(Style.Vb.Keyword4).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Keyword4).Bold = False 
     .Styles(Style.Vb.Keyword4).ForeColor = Color.FromArgb(255, 54, 139, 214) 
     .Styles(Style.Vb.Number).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Number).Bold = True 
     .Styles(Style.Vb.Number).ForeColor = Color.FromArgb(255, 181, 206, 168) 
     .Styles(Style.Vb.Operator).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Operator).Bold = True 
     .Styles(Style.Vb.Operator).ForeColor = Color.Silver 
     .Styles(Style.Vb.Preprocessor).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.Preprocessor).ForeColor = Color.MediumOrchid 
     .Styles(Style.Vb.String).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.String).ForeColor = Color.FromArgb(255, 214, 157, 133) 
     .Styles(Style.Vb.StringEol).BackColor = Color.FromArgb(255, 30, 30, 30) 
     .Styles(Style.Vb.StringEol).FillLine = True 
     .Styles(Style.Vb.StringEol).ForeColor = Color.Gainsboro 
    End With 

    ' Set the Vb.Net keywords. 
    editor.SetKeywords(1, keywords) 


End Sub 
+0

对于试图去掉C#标记的用户,请记住.Net invovles允许各种支持的语言和OPs请求这些语言的解决方案,所以我要求任何在Vb.Net或C#中的解决方案因为我可以接受其中之一,如果有人会用ScintillaNET源代码来检查这个问题的原因,那么它涉及C#知识。谢谢。 – ElektroStudios

+1

我在这个项目中挖了一点点。它可能在'folding.cs'类中,但不确定。我会在以后再挖掘... https://scintillanet.codeplex.com/SourceControl/latest#Branches/4.0/ScintillaNET/Folding.cs – Codexer

回答

2

该行为似乎是原生Scintilla中的“特征”,而不仅仅是.NET包装。它也可以在SciTE编辑器中看到。我发现这个VB折叠相关的bug report,它被重新分类为一个功能请求。它于2013年提交,涉及VB6,但似乎适用。它声明VB文件夹基于缩进,而不是语法。

使用您提供的样式,我能够复制您描述的问题。一旦至少有一个空间缩进出现在每个嵌套行,甚至空白行,折叠出现如预期。