吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1243|回复: 11
收起左侧

[已解决] 关于c#RichTextBox插入文本颜色的问题

[复制链接]
天下有道 发表于 2022-7-28 09:14
本帖最后由 天下有道 于 2022-7-29 08:46 编辑

往richtextbox插入文本和文本颜色,但是如果出现鼠标点击前一行的文本后,后面的文本颜色就会变成黑色,点击最后面的文本就不会出这个问题,如图,蓝色框旁边的文本点击就会出这样的问题,绿色的不会出这个问题,并且如果不继续点击文本框,后面的就正常了
ex.png
dm.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

icysky0605 发表于 2022-7-28 09:26
那肯定的呀,你这个颜色写入方法是在光标所在的位置开始,之后的会自动变成默认颜色的,你得先把readonly打开,然后颜色设置是要分段的,通过代码找到精确的位置选择范围再设置颜色,这样才是输出的部分有颜色,其它不影响。
如果是用来做日志的话,建议你用NLog,然后安装NLog的winforms再添加richtextbox支持,那个东西相当方便哟。
颜色什么的还不是随意配置
微信图片_20220728092500.png
 楼主| 天下有道 发表于 2022-7-28 09:50
icysky0605 发表于 2022-7-28 09:26
那肯定的呀,你这个颜色写入方法是在光标所在的位置开始,之后的会自动变成默认颜色的,你得先把readonly打 ...

NLog能插入文本和颜色到richtextbox里面?
icysky0605 发表于 2022-7-28 09:54
天下有道 发表于 2022-7-28 09:50
NLog能插入文本和颜色到richtextbox里面?

当然可以呀,安装NLog再安装NLog.Windows.Forms,然后注册一个类型为RichTextBox的Target,之后就可以配置了,我发的截图就是NLog输出的呀
su113641 发表于 2022-7-28 10:17
好,感谢楼主分享
 楼主| 天下有道 发表于 2022-7-28 11:01
icysky0605 发表于 2022-7-28 09:54
当然可以呀,安装NLog再安装NLog.Windows.Forms,然后注册一个类型为RichTextBox的Target,之后就可以配 ...

能不能贴一下你用的配置,我的日志没有输出到richtextbox上来,只是生成了日志文件而已
icysky0605 发表于 2022-7-28 11:08
本帖最后由 icysky0605 于 2022-7-28 11:10 编辑
天下有道 发表于 2022-7-28 11:01
能不能贴一下你用的配置,我的日志没有输出到richtextbox上来,只是生成了日志文件而已

第一,logger要在FMain_Load中初始化,因为要等控件创建完毕。
第二,要自行注册一个Target,如下,当然,只要初始化一次,整个程序都共用的
ConfigurationItemFactory.Default.Targets.RegisterDefinition("RichTextBox", typeof(RichTextBoxTarget));
logger = LogManager.GetCurrentClassLogger();
下面是我的配置,具体每个项目是啥意思,可以去看官方文档,最后,我的NLog用的是5,最新版的
[XML] 纯文本查看 复制代码
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Error" internalLogFile="${basedir}/Logs/interna.log">
  <targets async="true">
    <target name="AsyncRichTextBox"
            xsi:type="RichTextBox"
            allowAccessoryFormCreation ="false"
            controlName="richLog"
            formName="FMain"
            maxLines="5000"
            autoScroll="true"
            useDefaultRowColoringRules="false"
            layout="${longdate} ${message}">
      <row-coloring condition="level = LogLevel.Trace" fontColor="Lavender"/>
      <row-coloring condition="level = LogLevel.Debug" fontColor="DarkGoldenrod"/>
      <row-coloring condition="level = LogLevel.Info" fontColor="LimeGreen"/>
      <row-coloring condition="level = LogLevel.Warn" fontColor="DarkOrange"/>
      <row-coloring condition="level = LogLevel.Error" fontColor="Red"/>
      <row-coloring condition="level = LogLevel.Fatal" fontColor="HotPink"/>
      <word-coloring fontColor="LightSteelBlue" ignoreCase="true" regex="([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{4})" style="Regular"/>
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="AsyncRichTextBox" />
  </rules>
</nlog>
 楼主| 天下有道 发表于 2022-7-28 11:36
icysky0605 发表于 2022-7-28 11:08
第一,logger要在FMain_Load中初始化,因为要等控件创建完毕。
第二,要自行注册一个Target,如下,当然 ...

我看官方文档描述更模糊更懵,你这个name="AsyncRichTextBox"作啥用   ConfigurationItemFactory.Default.Targets.RegisterDefinition("RichTextBox", typeof(RichTextBoxTarget));
里面的RichTextBox是控件名吗还是什么,这个RichTextBoxTarget又是干嘛的
icysky0605 发表于 2022-7-28 12:08
本帖最后由 icysky0605 于 2022-7-28 12:11 编辑
天下有道 发表于 2022-7-28 11:36
我看官方文档描述更模糊更懵,你这个name="AsyncRichTextBox"作啥用   ConfigurationItemFactory.Default ...

AsyncRichTextBox只是一个logger的名字,和下面的rules中的writeTo是对应的

这一句
ConfigurationItemFactory.Default.Targets.RegisterDefinition("RichTextBox", typeof(RichTextBoxTarget));
中的前一个RichTextBox和配置中的xsi:type="RichTextBox"是对应的,typeof中的RichTextBoxTarget是NLog.windows.forms中的一个类,也是一个Target类型,因为默认的NLog中Target人DB,FILE等等,但是不有这个RichTextBox嘛
formName是主窗体名字,richLog才是窗体上RichTextBox的名字
 楼主| 天下有道 发表于 2022-7-28 13:51
本帖最后由 天下有道 于 2022-7-28 13:56 编辑
icysky0605 发表于 2022-7-28 12:08
AsyncRichTextBox只是一个logger的名字,和下面的rules中的writeTo是对应的

这一句

我用RichTextBoxTarget不行,用RichTextBox就可以生成日志,但是仍然不能打印日志到richtextbox里面,很奇怪的是它打印在控制台里面
kzt.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表