天道酬勤,学无止境

具有语法高亮显示的文本框/ richtextbox? [C#] [关闭](A textbox/richtextbox that has syntax highlighting? [C#] [closed])

问题

在哪里可以找到WinForms控件,该控件将突出显示粘贴到其中的源代码? 我想要一种对多种不同语言都具有语法高亮显示的支持,但是如果仅与C#一起使用,我也可以。

回答1

Scintilla.NET可能就是您想要的

回答2

最近,在codeproject Fast Colored TextBox中发现了一个不错的控件,用于突出显示语法。

使用富文本框作为突出显示的唯一问题是在文档尺寸较大的情况下着色速度较慢。 对于中等大小的文档,可以通过延迟突出显示来解决此问题。

回答3

作为开源替代品,请看一下:

  • dotNet火球
  • SharpDevelop的ICSharpCode.TextEditor
回答4

将ICSharpCode.TextEditor程序集引用添加到项目,为Visual Studio Toolbox选择程序集和控件。 之后,您可以将控件放到窗体上。 令人惊讶的是,您不会看到“属性”来选择语法突出显示架构。 取而代之的是,您必须使用方法SetHighlighting。 字符串参数从可用模式列表中设置突出显示模式。 这些模式被嵌入到控件中。

如何使用,更改架构和下载示例,请看以下文章

回答5

如果您愿意为控件付费,那么我强烈推荐以下控件:QWhale语法编辑。 它具有大量功能,附带源代码,并支持多种语言。 我自己将其用于C#,VB.NET,SQL(MS和Oracle),并且它具有VS提供的所有功能。

回答6

签出AvalonEdit控件。 在CodeProject上有一篇很好的文章解释了如何使用它。

回答7

不知道是否有任何开箱即用的非第三方解决方案。

但是,您是否看过Actipro SyntaxEditor组件。 ubercool linq工具LinqPad使用它进行语法突出显示和智能感知。

回答8

您可以尝试一下http://www.codeproject.com/KB/edit/SyntaxHighlighting.aspx

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • RichTextBox语法实时高亮显示-禁用重绘(RichTextBox syntax highlighting in real time--Disabling the repaint)
    问题 我正在创建一个使用RichTextBox并可以访问关键字和'badwords'列表的函数。 我需要突出显示在用户键入时在RichTextBox中找到的所有关键字和关键字,这意味着每次释放编辑键时都会调用该函数。 我已经编写了此函数,但是框中的单词和光标闪烁得太舒服了。 我发现了一个解决方案-在我编辑和格式化其文本时禁用RichTextBox自己重新绘制的功能。 但是,我唯一知道做到这一点的方法是重写“ WndProc”函数并拦截重绘消息,如下所示: protected override void WndProc(ref System.Windows.Forms.Message m) { if (m.Msg == 0x00f) { if (paint) base.WndProc(ref m); else m.Result = IntPtr.Zero; } else base.WndProc(ref m); } 布尔值“ paint”在开始突出显示之前设置为false,在结束时设置为true。 但是正如我说的,我制作的函数必须包含在RichTextBox中。 我不能使用子类。 因此,有没有办法从外部禁用RichTextBox的自动重绘? 回答1 这是RichTextBox类中的一个疏忽。 其他控件(如ListBox)支持BeginUpdate和EndUpdate方法来禁止绘画。
  • 如何以MS Word保留格式和语法高亮显示代码段?(How do you display code snippets in MS Word preserving format and syntax highlighting?)
    问题 有谁知道一种在Microsoft Word文档中显示可保留颜色和格式的代码的方法? 优选地,该方法也将是不引人注目的并且易于更新。 我试图将代码作为常规文本包含在内,这看起来很糟糕,并且在编辑常规文本时会遇到麻烦。 我还尝试将对象(写字板文档和文本框)插入文档,然后将代码放入这些对象中。 该代码看起来更好,并且在编辑其余文本时更容易避免。 但是,这些对象只能跨越一页,这在需要添加几页代码时使编辑成为一场噩梦。 最后,我知道有更好的编辑器/格式可以解决此问题,但是我仍然坚持使用MS word。 回答1 对我来说,这是在word中添加代码的最佳方法: 转到“ Insert选项卡的“ Text部分,单击“ object按钮(在右侧) 选择“ OpenDocument Text ,这将打开一个新的嵌入式Word文档从Visual Studio / Eclipse复制并粘贴您的代码到此嵌入式word页面中保存并关闭 结果看起来非常不错。 这是此方法的优点: 代码保持其原始布局和颜色代码与文档的其余部分分开,好像是图片还是图表拼写错误不会在代码中突出显示(这很酷!) 而且只需要几秒钟。 回答2 下载并安装Notepad ++并执行以下操作: 将您的代码粘贴到窗口中; 从语言菜单中选择编程语言; 选择要复制的文本; 右键单击并选择“插件命令” ->“复制带有语法突出显示的文本” ;
  • Richtextbox WPF绑定(Richtextbox wpf binding)
    问题 为了在WPF RichtextBox中进行Document绑定, RichtextBox ,我看到了2种解决方案,它们是从RichtextBox派生并添加DependencyProperty ,还有带有“代理”的解决方案。 第一个或第二个都不令人满意。 有人知道另一种解决方案,或者是可以进行数据绑定的商业RTF控件吗? 普通的TextBox ,因为我们需要文本格式。 任何的想法? 回答1 有一种更简单的方法! 您可以轻松创建一个附加的DocumentXaml (或DocumentRTF )属性,该属性将允许您绑定RichTextBox的文档。 它的用法如下,其中Autobiography是数据模型中的字符串属性: <TextBox Text="{Binding FirstName}" /> <TextBox Text="{Binding LastName}" /> <RichTextBox local:RichTextBoxHelper.DocumentXaml="{Binding Autobiography}" /> 瞧! 完全可绑定的RichTextBox数据! 此属性的实现非常简单:设置该属性后,将XAML(或RTF)加载到新的FlowDocument 。 当FlowDocument更改时,更新属性值。 这段代码可以解决这个问题: using System.IO
  • 如何比较两个富文本框内容并突出显示已更改的字符?(How to compare two rich text box contents and highlight the characters that are changed?)
    问题 我用于阅读2个richtextbox内容的代码如下: richTextBox1.Text = File.ReadAllText(tfsVersionFilePath); richTextBox2.Text = File.ReadAllText(dbVersionFilePath); 现在,我需要比较两个富文本框的内容,并突出显示两个富文本框中已更改的字符。 目的是通过c#应用程序获得差异并突出显示as in TFS (比较文件)中的字符。 谢谢。 编辑: int length = (richTextBox1.Text.Length > richTextBox2.Text.Length) ? richTextBox1.Text.Length : richTextBox2.Text.Length; for (int i = 0; i < length; i++) { if (richTextBox1.Text[i] != richTextBox2.Text[i]) { /* and then start your highlight selection here, this is where some difference between the two rich text boxes begins */ richTextBox1.Select(i, 1)
  • 有什么办法可以使WPF文本块成为可选的?(Any way to make a WPF textblock selectable?)
    问题 如何允许TextBlock的文本是可选的? 我试图通过使用只读的TextBox来显示文本,使其看起来像文本块,从而使其正常工作,但是在我的情况下,这是不起作用的,因为TextBox没有内联。 换句话说,如何使其成为可选择的? 回答1 而是使用具有这些设置的TextBox使其只读并看起来像TextBlock控件。 <TextBox Background="Transparent" BorderThickness="0" Text="{Binding Text, Mode=OneWay}" IsReadOnly="True" TextWrapping="Wrap" /> 回答2 这里的所有答案都只是使用TextBox或尝试手动实现文本选择,这会导致性能不佳或非本地行为( TextBox插入记号闪烁,手动实现中不支持键盘等)。 经过数小时的研究和阅读WPF源代码,我发现了一种为TextBlock控件(或实际上是任何其他控件)启用本机WPF文本选择的方法。 围绕文本选择的大多数功能是在System.Windows.Documents.TextEditor系统类中实现的。 要为控件启用文本选择,您需要做两件事: 一次调用TextEditor.RegisterCommandHandlers()以注册类事件处理程序为类的每个实例创建一个TextEditor实例,然后将System
  • 如何读取嵌入式资源文本文件(How to read embedded resource text file)
    问题 如何使用StreamReader读取嵌入式资源(文本文件)并将其作为字符串返回? 我当前的脚本使用Windows窗体和文本框,允许用户在未嵌入的文本文件中查找和替换文本。 private void button1_Click(object sender, EventArgs e) { StringCollection strValuesToSearch = new StringCollection(); strValuesToSearch.Add("Apple"); string stringToReplace; stringToReplace = textBox1.Text; StreamReader FileReader = new StreamReader(@"C:\MyFile.txt"); string FileContents; FileContents = FileReader.ReadToEnd(); FileReader.Close(); foreach (string s in strValuesToSearch) { if (FileContents.Contains(s)) FileContents = FileContents.Replace(s, stringToReplace); } StreamWriter FileWriter = new
  • 使用其他线程更新GUI(WPF)(Updating GUI (WPF) using a different thread)
    问题 这里有一个我不知道如何解决的问题。 我正在做一个涉及GUI和串行数据的小项目。 GUI由主线程运行,由于保存我的传入串行数据的数据变量需要连续更新,因此这些变量将在第二个线程中进行更新。 问题是当我需要在GUI上更新一些文本框时,这些文本框需要使用辅助线程中的数据进行更新,这就是我的问题所在。 我不能直接从辅助线程更新它们,也不知道如何从辅助线程传输数据并制定出一个从主线程更新它们的系统。 我把我的代码放在下面: 任何帮助将是巨大的。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.IO; using
  • 在.NET中,“ for”或“ foreach”哪个循环运行得更快?(In .NET, which loop runs faster, 'for' or 'foreach'?)
    问题 在C#/ VB.NET / .NET中, for或foreach哪个循环运行得更快? 自从我很早以前就读过for循环比foreach循环的运行速度更快以来,我就认为它适用于所有集合,通用集合,所有数组等。 我搜寻了Google并发现了几篇文章,但其中大多数没有定论(阅读文章评论)且开放式。 理想的情况是列出每个方案,并为它们提供最佳解决方案。 例如(仅作为示例): 对于迭代1000+字符串数组- for好过foreach 用于遍历IList (非通用)字符串foreach比for更好 在网上找到了一些相同的参考文献: 伊曼纽尔·尚查(Emmanuel Schanzer)的原创宏伟旧文章 CodeProject FOREACH与。 为了博客-进行或不进行,这是一个问题 ASP.NET论坛-NET 1.1 C#for vs foreach [编辑] 除了可读性之外,我对事实和数据真的很感兴趣。 在某些应用程序中,压缩性能优化的最后一刻确实很重要。 回答1 Patrick Smacchia上个月在博客上发表了以下结论: List上的for循环比List上的foreach循环便宜2倍多。 在数组上循环比在List上循环便宜大约2倍。 结果,使用for循环在数组上的循环比使用foreach循环在List上的循环便宜5倍(我相信,这是我们所有人所做的)。 回答2 首先,对德米特里
  • 如何将图像插入RichTextBox?(How can I insert an image into a RichTextBox?)
    问题 我看到的大多数示例都说将其放在剪贴板上并使用粘贴,但这似乎不是很好,因为它会覆盖剪贴板。 我确实看到了一种使用Pinvoke将图像手动转换为RTF并将图像转换为WMF的方法。 这是最好的方法吗? 我还能做些更简单的事情吗? 回答1 最直接的方法是修改RTF代码以自己插入图片。 在RTF中,图片的定义如下: '{'\ pict(brdr?&shading?&picttype&pictsize&metafileinfo?)数据'}'问号表示控制字是可选的。 “数据”只是十六进制格式的文件内容。 如果要使用二进制文件,请使用\ bin控制字。 例如: {\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860 hex data} {\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860\bin binary data} \ pict =开始一个图片组,\ pngblip = png图片\ picwX =图片的宽度(X是像素值)\ pichX =图片的高度\ picwgoalX =所需的图片宽度(以缇为单位) 因此,要插入图片,只需打开图片,将数据转换为十六进制,将这些数据加载到字符串中,然后在其周围添加RTF代码即可定义RTF图片。 现在
  • 如何获取特定类型(按钮/文本框)的Windows窗体形式的所有子控件?(How to get ALL child controls of a Windows Forms form of a specific type (Button/Textbox)?)
    问题 我需要获取类型为x的表单上的所有控件。 我敢肯定,我曾经见过使用如下代码的代码: dim ctrls() as Control ctrls = Me.Controls(GetType(TextBox)) 我知道我可以遍历所有使用递归函数让孩子使用的控件,但是有没有更简单或更直接的东西,也许像下面这样? Dim Ctrls = From ctrl In Me.Controls Where ctrl.GetType Is Textbox 回答1 这是您的另一种选择。 我通过创建一个示例应用程序对其进行了测试,然后将一个GroupBox和一个GroupBox放入初始的GroupBox中。 在嵌套的GroupBox中,我放置了3个TextBox控件和一个按钮。 这是我使用的代码(甚至包括您正在寻找的递归) public IEnumerable<Control> GetAll(Control control,Type type) { var controls = control.Controls.Cast<Control>(); return controls.SelectMany(ctrl => GetAll(ctrl,type)) .Concat(controls) .Where(c => c.GetType() == type); } 为了在表单加载事件中对其进行测试
  • 用C#编码表单时无法查看设计器(Can't view designer when coding a form in C#)
    问题 我正在使用winforms上的本教程,到目前为止,本教程是在不使用工具箱的情况下对表单进行编码的。 我相信它将在不久后更深入地介绍该工具箱。 在学习完本教程之后,我在下面的两段代码中做了一个局部类: 第一个档案: using System; using System.Windows.Forms; public class Numeric : System.Windows.Forms.TextBox { public Numeric() { } } public partial class Exercise { private Numeric txtbox; System.ComponentModel.Container components; } 第二档: using System; using System.Windows.Forms; public partial class Exercise : Form { private void InitializeComponent() { txtbox = new Numeric(); Controls.Add(txtbox); } public Exercise() { InitializeComponent(); } } public class program { public static int Main() {
  • 防止jQuery UI对话框将焦点设置到第一个文本框(Prevent jQuery UI dialog from setting focus to first textbox)
    问题 我已经设置了一个jQuery UI模式对话框,以在用户单击链接时显示。 在该对话框div标签中有两个文本框(为简洁起见,我仅显示1的代码),并将其更改为对焦点有反应的jQuery UI DatePicker文本框。 问题在于,jQuery UI对话框(“ open”)以某种方式触发了第一个文本框具有焦点,然后触发了日期选择器日历以立即打开。 因此,我正在寻找一种方法来防止焦点自动发生。 <div><a id="lnkAddReservation" href="#">Add reservation</a></div> <div id="divNewReservation" style="display:none" title="Add reservation"> <table> <tr> <th><asp:Label AssociatedControlID="txtStartDate" runat="server" Text="Start date" /></th> <td> <asp:TextBox ID="txtStartDate" runat="server" CssClass="datepicker" /> </td> </tr> </table> <div> <asp:Button ID="btnAddReservation" runat="server"
  • Windows窗体文本框的透明度(Transparency for windows forms textbox)
    问题 我在C#中使用Windows窗体,并且需要使文本框的背景色透明。 我有一个从0到255的轨迹栏,应该可以控制它,但是我遇到了一些麻烦。 我今天早些时候提出了一个问题,问的是完全相同的事情,但没有成功。 这是我目前拥有的代码: private void trackAlpha_ValueChanged(object sender, EventArgs e) { newColor = Color.FromArgb(trackAlpha.Value, colorDialog.Color.R, colorDialog.Color.G, colorDialog.Color.B); colorDialog.Color = newColor; // The Windows dialog used to pick the colors colorPreview.BackColor = newColor; // Textbox that I'm setting the background color } 问题是绝对没有任何反应。 关于为什么这行不通的任何想法? 在上一个问题上,这个好人说了一些有关SetStyle(ControlStyles.SupportsTransparentBackColor, true); ,但我不知道该放在哪里。 回答1 您需要尝试这样的事情。 添加一个新的用户控件
  • 在VBA函数调用中,括号的使用规则是什么?(What are the rules governing usage of brackets in VBA function calls?)
    问题 由于我在传递给我定义的Sub的参数周围使用方括号引起的VBA(Access 2003)中的“编译器错误”,我刚刚经历了30分钟的烦人。 我一直在寻找关于什么时候需要/适当/不适当/禁止使用方括号的体面的文章/教程/说明,但是找不到任何明确的指南。 回答1 从这里: 使用VBScript调用语句调用子例程当您希望调用子例程时,使用调用语句是可选的。 与Sub一起使用时,Call语句的目的是允许您将参数列表括在括号中。 但是,如果子例程未传递任何参数,则在使用Call语句调用Sub时,仍不应使用括号。 Call MySubroutine 如果子例程具有参数,则在使用Call语句时必须使用括号。 如果有多个参数,则必须用逗号分隔参数。 Call MySubroutine(intUsageFee, intTimeInHours, "DevGuru") 调用函数有两种可能的方法来调用函数。 您可以直接调用该函数(仅按名称),也可以使用VBScript Call语句来调用它。 按名称调用函数当按名称直接调用函数并且没有对返回值的赋值时,以下所有均为合法语法: MyFunction MyFunction() MyFunction intUsageFee, intTimeInHours, "DevGuru" 如果需要返回值,可以将函数分配给变量。 请注意,如果有一个或多个参数,则必须使用括号
  • C#-Winform重要知识点
    C#-Winform重要知识点 一.创建窗体注意点:二、弹出框三、窗体打开、关闭、方式四、相关控件取值和清空五、显示下拉框中的值,并添加“请选择”六、其它 一.创建窗体注意点: 1、命名 属性:Name 只要在代码里出现的控件,就必须按照规范命名 Label lbl(简写) TextBox txt Button btn ComboBox cbo DataGridView dgv ListView lv TreeView tv RadioButton rdo contextMenuStrip cms 右键菜单 GroupBox grp 分组框 MenuStrip ms 菜单项 ToolStripMenuItem tsmi Panel pnl 面板 DateTimePicker dtp 时间控件 2、标题 属性:Text 3、子窗体在屏幕中央 startPosition:CenterScreen 4、子窗体禁止最大化 Maximinzed:false 5、子窗体禁止最小化 Miniminzed:false 6、子窗体大小固定不变 FormBorderStyle:fixedSingle 7、父窗体设置最大化 windowState:Maximized 8、父窗体设置MDI IsMDIContainer:true 9、下拉框不允许输入值 DropDownStyle:DropDownList
  • 一站式手把手教你学习Sublime Text 3(插件安装、html/css速写、输入法不跟光标等)
    Sublime Text 是一款流行的代码编辑器软件,也是HTML和散文先进的文本编辑器,可运行在Linux,Windows和Mac OS X。也是许多程序员喜欢使用的一款文本编辑器软件。下面就重点介绍一下Sublime Text相关的实用技能。 插件安装 Sublime3插件方法方法1:直接安装安装Sublime text 3插件很方便,可以直接下载安装包解压缩到Packages目录(菜单->preferences->Browse Packages)。方法2:使用Package Control组件安装 按Ctrl+ `(此符号为tab按键上面的按键) 调出console(注:避免热键冲突) 粘贴以下代码到命令行并回车: import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime
  • WinForms中的水印文本框(Watermark TextBox in WinForms)
    问题 谁能指出我对基本Windows Forms TextBox的良好实现,它最初将显示水印文本,当光标进入该文本时会消失吗? 我想我可以通过创造性地使用Enter和Leave事件来创建自己的应用程序,但是我敢肯定某个地方有一个完全可用的实现。 我看到了WPF的实现,必要时可以嵌套它,但是使用本机WinForms TextBox派生会更好。 到目前为止,我已经知道了。 还没有尝试过,但是有人看到明显的问题吗? public class WatermarkTextBox:TextBox { public string WatermarkText { get; set; } public Color WatermarkColor { get; set; } private Color TextColor { get; set; } private bool isInTransition; public WatermarkTextBox() { WatermarkColor = SystemColors.GrayText; } private bool HasText { get { return Text.IsNotNullOrBlankOr(WatermarkText); }} protected override void OnEnter(EventArgs e) { base
  • 如何在表单应用程序中显示控制台输出/窗口?(How do I show a console output/window in a forms application?)
    问题 要立即陷入困境,这是一个非常基本的示例: using System; using System.Windows.Forms; class test { static void Main() { Console.WriteLine("test"); MessageBox.Show("test"); } } 如果按预期使用默认选项(在命令行中使用csc)进行编译,它将编译为控制台应用程序。 另外,由于我导入了System.Windows.Forms ,因此它还将显示一个消息框。 现在,如果我使用选项/target:winexe ,我认为它与从项目选项中选择Windows Application相同,按预期,我只会看到消息框,而没有控制台输出。 (实际上,从命令行启动它之后,我可以在应用程序完成之前发出下一条命令)。 所以,我的问题是-我知道您可以从控制台应用程序中获取“ windows” /窗体输出,但是无论如何,还是可以从Windows应用程序中显示控制台吗? 回答1 这应该工作。 using System.Runtime.InteropServices; private void Form1_Load(object sender, EventArgs e) { AllocConsole(); } [DllImport("kernel32.dll", SetLastError
  • Visual Studio(2005-2010)的隐藏功能?(Hidden Features of Visual Studio (2005-2010)?)
    问题 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 Visual Studio是一个如此巨大的产品,即使经过多年的使用,我有时还是会偶然发现一种新的,更好的方式来做事情或什至是我所不知道的事情。 例如- Crtl + R , Ctrl + W显示空白。 对于编辑Python构建脚本至关重要。 在"HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\Text Editor"创建一个名为“ Guides "HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\Text Editor"的字符串,其值为“ RGB(255,0,0),80”,以在文本编辑器的第80列处显示红线。 您还偶然发现了哪些其他隐藏功能? 回答1 在按下ALT的情况下进行选择-选择文本的正方形而不是整行。 回答2 追踪点! 在一行代码上放置一个断点。 打开“断点”窗口,然后右键单击新的断点。 选择“当命中...”。 通过选中“打印消息”复选框,Visual Studio将在每次执行代码行时(而不是(同时)中断)将消息输出到Debug Output。 您也可以让它在通过该行时执行宏。 回答3 您可以将代码拖到工具箱中。 试试吧! 回答4 单击一个标识符(类名
  • 将占位符文本添加到文本框(Adding placeholder text to textbox)
    问题 我正在寻找一种将占位符文本添加到文本框的方法,就像可以使用html5中的文本框一样。 即,如果文本框没有文本,则添加Enter some text here ,当用户单击它时,占位符文本消失并允许用户输入自己的文本,并且如果文本框失去焦点并且仍然没有文本然后将占位符添加回文本框。 回答1 那不是仅仅是这样的事情: Textbox myTxtbx = new Textbox(); myTxtbx.Text = "Enter text here..."; myTxtbx.GotFocus += GotFocus.EventHandle(RemoveText); myTxtbx.LostFocus += LostFocus.EventHandle(AddText); public void RemoveText(object sender, EventArgs e) { if (myTxtbx.Text == "Enter text here...") { myTxtbx.Text = ""; } } public void AddText(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(myTxtbx.Text)) myTxtbx.Text = "Enter text here..."; }