| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 422 人关注过本帖
标题:如何获得edit框的行数问题
只看楼主 加入收藏
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1054
专家分:1581
注 册:2021-10-13
收藏
得分:0 
这个问题已经解决,参考@easyppt的那篇文章 https://bbs.bc-cn.net/thread-514540-1-1.html 12楼

只是行数,不带考虑每行的文字,可以稍微快点。

让deepseek给我详细注释一下我的代码,可读性更强了。

deepseek评价:
代码功能分析
‌主要功能‌:通过模拟键盘操作和光标位置检测,精确计算编辑框控件中的文本行数。
...
...
代码特点
可靠性‌:通过实际的光标移动来检测行数,避免文本换行等复杂情况的干扰
稳定性‌:使用Sleep函数确保键盘操作完全执行
实用性‌:适用于各种文本内容的行数统计需求
这段代码在处理多行文本编辑框的行数统计方面具有很好的实用价值。

程序代码:

DECLARE integer Sleep IN WIN32API integer

* 定义局部变量
Local nstartpos, npos, nrows
Local oedit as EditBox  * 定义编辑框引用

* 获取编辑框控件引用
oedit = Thisform.edit1 

* 设置焦点到编辑框
oedit.SetFocus()  

* 模拟键盘按下Ctrl[color=#808080]+Home,将光标移动到文本开头[/color]
Keyboard '{CTRL+HOME}' 
* 处理事件,确保键盘操作完成
Doevents 
sleep(600)
* 记录当前光标位置作为起始位置
nstartpos = oedit.SelStart 

* 初始化行计数器
nrows = 1  

* 开始循环计算行数
Do while .t. 

    Keyboard '{DNARROW}' 
    * 处理事件
    Doevents 
    sleep(600)    
    * 记录新的光标位置
    npos = oedit.SelStart 
    
    * 判断是否到达文本末尾(位置没有变化)
    If nstartpos = npos 
        * 如果位置没有变化,说明已到达最后一行,退出循环
        nrows=nrows-1
        Exit 
    Else 
        * 否则更新起始位置为新的行首
        nstartpos = npos 
        * 行计数器加1
        nrows = nrows + 1 
    EndIf 
EndDo 

* 模拟键盘按下Ctrl[color=#808080]+Home,将光标重新移动到文本开头[/color]
Keyboard '{CTRL+HOME}' 

* 将最终行数赋给外部参数
thisform.text1.value = nrows


[此贴子已经被作者于2025-11-11 11:39编辑过]

昨天 11:25
快速回复:如何获得edit框的行数问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036407 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved