标题:请教edit编辑框如何读出当前光标所在行(段)的内容
只看楼主
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
回复 9楼 csyx
谢谢,您的这程序很不错,但修改后测试里边带有回车换行符。回车换行符删除不了,这一行就不能当作表达式来计算。能解决下吗。

nPos = Thisform.edit1.SelStart
nn = 0
For ii = 1 to ALines(aTemp, Thisform.edit1.Value)
    nn = nn + Len(aTemp[ii]) + 2
    If nn > nPos
        *MessageBox('选中块内容:' + 0h0d0a + m.aTemp[ii])
        Exit
    EndIf
ENDFOR

****** 以下为修改测试部分
MESSAGEBOX("** "+0h0d0a + m.aTemp[ii]+" **")
c_x=STRTRAN(0h0d0a + m.aTemp[ii],CHR(13),'')
MESSAGEBOX("** "+c_x+" **")
2019-02-27 10:48
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
回复 10楼 yewxj
很不错,谢谢了。但还是有问题啊。
aaa = THISFORM.edit1.VALUE
bbb1 = LEFT(aaa,THISFORM.edit1.SELSTART)
ccc1 = SUBSTR(bbb1,RATC(CHR(13),bbb1)+1,LEN(bbb1)-RATC(CHR(13),bbb1)+1)
bbb2 = RIGHT(aaa,LEN(aaa)-THISFORM.edit1.SELSTART)
IF ATC(CHR(13),bbb2) = 0
    ccc2 = bbb2
ELSE
    ccc2 = LEFT(bbb2,ATC(CHR(13),bbb2))
ENDIF
*MESSAGEBOX(ccc1+ccc2)

****** 以下为修改测试部分
MESSAGEBOX("** "+ccc1+ccc2+" **")
c_x=STRTRAN(ccc1+ccc2,CHR(13),'')
MESSAGEBOX("** "+c_x+" **")

*改之前MESSAGEBOX显示尾部有个回车符chr(13),STRTRAN后显示回车符没有了,这已经满足要求了。
*但只要修改了任意内容,再按COMMAND显示中间两行时,发现头部多了个回车符,这问题无法解决。

*因为要计算每一行,有回车符就会产生“表达式错误”而不能计算。垦请解决这问题,谢谢。
2019-02-27 10:50
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
得分:0 
回复 12楼 丁春秋yxp
left函数里面加一个 -1
2019-02-27 11:40
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
回复 13楼 yewxj
-1后解决了笫一个问题,但笫二个问题依旧。如图,明显看出c_x头部有个回车换行。只要修改了某行内容,几乎所有行头部都会多出个回车换行无法删除。

[此贴子已经被作者于2019-2-27 16:14编辑过]

2019-02-27 14:17
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
2019-02-27 14:21
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
9楼的方案也就是这个原因,头部的回车换行符删除不了。

[此贴子已经被作者于2019-2-27 15:10编辑过]

2019-02-27 14:22
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
c_x="1+2" 时,evaluate(c_x)=3。

但当 c_x=chr(13)+"1+2" 时,evaluate(c_x) 就“缺少表达式”而出错。

现在想解决的就是删除掉这个头部的chr(13)。请帮忙。
2019-02-27 15:03
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
以下是引用丁春秋yxp在2019-2-27 10:48:30的发言:
****** 以下为修改测试部分
MESSAGEBOX("** "+0h0d0a + m.aTemp+" **")
c_x=STRTRAN(0h0d0a + m.aTemp,CHR(13),'')
MESSAGEBOX("** "+c_x+" **")


加上 0h0d0a 只是为了吧 “选中块内容:”与实际内容分开显示为两行,真实内容就是 aTemp[ii]


MessageBox('选中块内容:' + 0h0d0a + aTemp[ii])
换成
MessageBox(aTemp[ii])
或者
MessageBox('** '+aTemp[ii]+' **')
明白?


[此贴子已经被作者于2019-2-27 16:53编辑过]

2019-02-27 16:50
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
其实还有一个问题,editbox换行可能有几种原因 1. 回车+换行 2. 仅有回车,3. 仅有换行
如果内容是手工输入的,分行应该是硬回车chr(13)+chr(10),如果是用代码给Value赋值的,那么就可能是软回车,仅chr(13)或chr(10),而不是回车换行组合。

想要代码适应这几种情况,做如下修改:

nPos = Thisform.edit1.SelStart
nn = 0
For ii = 1 to ALines(aTemp, Strtran(Thisform.edit1.Text, Chr(13)+Chr(10), Chr(1)+Chr(10)))
    nn = nn + Len(aTemp[ii]) + 1
    If nn > nPos
        cc = Rtrim(aTemp[ii], Chr(1))
        MessageBox('** ' + cc + ' **')
        Exit
    EndIf
EndFor
2019-02-27 17:09
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
回复 19楼 csyx
相当详细,谢谢,等会上电脑试试后再反馈。
2019-02-27 17:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493240-1-1.html




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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033643 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved