搜索
aardio官方社区 门户 查看主题

richedit控件问题请教:如何解决删除字符导致光标不在可见显示范围内的问题

发布者: lly10011 | 发布时间: 2018-4-4 17:21| 查看数: 176| 评论数: 13|帖子模式

    各位专家,我现在遇到一个奇怪的问题,希望大家帮我解惑,谢谢!
    如下的代码,复制"1234567890",然后重复粘贴在richedit控件内,当粘贴到第四行时开始删除最后的字符,可以看到以下现象:删除前可以在控件内看到光标闪烁,删除一个字节后,光标就不见了,必须鼠标滚动一下才可以看到;删除到第三行后,光标会一直在控件的最后位置闪烁。
    注释掉“winform.richedit.color = -1;                                                                                                                // 设置字体颜色为黑色”这句代码后,该问题就消失了。
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio Form";right=487;bottom=147;parent=...)
  4. winform.add(
  5. richedit={cls="richedit";text="1234567890";left=84;top=52;right=392;bottom=88;edge=1;multiline=1;vscroll=1;wrap=1;z=1}
  6. )
  7. /*}}*/

  8. //如果需要接收_EN_CHANGE通知就要加下面这句
  9. winform.richedit.modifyEvent(,0x1/*_ENM_CHANGE*/);
  10. winform.richedit.oncommand = function(id,event){
  11.     if(event == 0x300/*_EN_CHANGE*/){
  12.                 winform.richedit.color = -1;                                                                                                                // 设置字体颜色为黑色
  13.     }
  14. }

  15. winform.show()
  16. win.loopMessage();
  17. return winform;
复制代码


最新评论

lly10011 发表于 2018-4-8 18:26:08
在设置字体颜色为黑色之后,增加将滚动光标到当前行,能够解决该问题,虽然不是很合适。
winform.richedit.scrollCaret();
Jacen.He 发表于 2018-4-11 12:17:25
无论是加不加换行,按你说的测试都没有出现你所说的光标消失。
看了半天没看明白你想表达的意思,复制"1234567890",为什么就变成了多行呢,是说回车添加换行再粘贴吗?!描述问题能不能把这些讲一下,不要这样让别人猜呢?!

另外,你为什么把一个多行文本框,搞成单行的高度呢?!这不会把你自己都绕晕了吗?!
又为什么要在 EN_CHANGE 里不停的改字体颜色呢?!这会导致不必要的重绘,能有多正常呢?!

另外,winform.richedit.scrollCaret() 如果能解决你的问题,为什么他就不合适了呢?!
要直接改  richedit 控件?! 那我可改不了,richedit 是系统控件,只有微软能改。
Jacen.He 发表于 2018-4-11 12:25:24
另外,反馈这类问题,最好说一下你的操作系统环境。
pamde 发表于 2018-4-11 13:14:00
用你的代码测试一切正常,没出现光标消失问题,建议你截图GIF看看
lly10011 发表于 2018-4-11 14:41:31
测试环境:Windows 7旗舰版 SP1
    这是一段测试代码,之所以多行文本框只有那么高,是因为正式代码中的控件高度只有这么高。
    该richedit控件是自动换行的,所以一直粘贴就会有多行产生,不需要回车换行。
    一直改颜色的原因是:这个richedit控件可以通过粘贴从别处复制过来的字符串,而粘贴过来的字符串不一定是黑色的,所以我这里就是发现控件内容发生变化,就立即修改一次颜色。这里一直在改颜色确实不合适,我测试了下,好像只会产生0x100、0x200、0x300和0x400这几个事件,其他事件更加不合适了。
    后来我还是测试了下,应该是系统重绘导致的问题,而且把这个文本框稍微拉长点也可以解决(或者说需要更多行数)。
lly10011 发表于 2018-4-11 14:46:07
刚才忘记说了,测试环境是:Windows 7旗舰版 SP1 32位操作系统.
Jacen.He 发表于 2018-4-11 14:57:59
lly10011 发表于 2018-4-11 14:41
测试环境:Windows 7旗舰版 SP1
    这是一段测试代码,之所以多行文本框只有那么高,是因为正式代码中的 ...

无法重现你的问题,不清楚你是什么情况,
软件是你自己做的,文本框一定要拖这么小然后放多行吗,
如果 winform.richedit.scrollCaret() 能解决你可以加上,或者试试 winform.richedit.redraw();
lly10011 发表于 2018-4-11 19:03:34
谢谢校长,winform.richedit.redraw()这个我试了,一样的情况,现在用winform.richedit.scrollCaret()没有问题了
lly10011 发表于 2018-4-11 19:30:38
我做了一个GIT图片,希望能说清楚我要表达的问题。
lly10011 发表于 2018-4-11 19:32:27
上图中,删除前是可以在控件中看到光标的,删除后就看不见了,必须向下滚动一下鼠标才可以看见
我心飞翔1995 发表于 2018-4-11 21:36:04
lly10011 发表于 2018-4-11 19:32
上图中,删除前是可以在控件中看到光标的,删除后就看不见了,必须向下滚动一下鼠标才可以看见

你的图我看不出任何问题,我用你说是出问题的代码测试,也没有问题。
如果你能确认这个不是偶发的为问题,请用慢速重新录制一下,明确指出导致问题出现的操作和问题的现象。
另外,如果光标问题不影响正常操作或者在软件成品的实际使用中不易察觉,你可以不必太过在意,仅仅是为一个无伤大雅的小瑕疵折腾这么多精力实在没必要。
Jacen.He 发表于 2018-4-11 22:36:50
这个软件估计是自用的吧,
这么小的文本框给用户编辑多行文本也不方便,估计设计richedit控件的人都没考虑到有人会这样用,所以有点不正常。
你拖大一点点吧,难道界面上这么几毫米也腾不出来。
lly10011 发表于 2018-4-12 09:07:55
本帖最后由 lly10011 于 2018-4-12 09:08 编辑

谢谢大家,我用winform.richedit.scrollCaret()这个函数解决问题了。

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-4-22 11:06 , Processed in 0.062502 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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