吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1471|回复: 11
上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
天下有道 发表于 2022-7-28 09:14 回帖奖励
本帖最后由 天下有道 于 2022-7-29 08:46 编辑

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

ex.png (9.57 KB, 下载次数: 0)

ex.png

dm.png (11.96 KB, 下载次数: 1)

dm.png

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

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

微信图片_20220728092500.png (7.68 KB, 下载次数: 2)

微信图片_20220728092500.png
3#
 楼主| 天下有道 发表于 2022-7-28 09:50 |楼主
icysky0605 发表于 2022-7-28 09:26
那肯定的呀,你这个颜色写入方法是在光标所在的位置开始,之后的会自动变成默认颜色的,你得先把readonly打 ...

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

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

能不能贴一下你用的配置,我的日志没有输出到richtextbox上来,只是生成了日志文件而已
7#
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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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>
8#
 楼主| 天下有道 发表于 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又是干嘛的
9#
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的名字
10#
 楼主| 天下有道 发表于 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 (8.95 KB, 下载次数: 0)

kzt.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-5-23 14:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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