zhzj2007 发表于 2007-12-13 09:28:01

上位机中:请教个简单VB6 文本框问题

文本框text1已经打开多行功能
如何在接收数据达到最底行时,让垂直滚栏出现在最下方,这样就可以看到实时接收到的数据,而不是默认的出现在最上方

http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_187969.jpg

zxq6 发表于 2007-12-13 09:32:16

好像是text1.selstart=len(text1.text)

zhzj2007 发表于 2007-12-13 09:40:15

刚试了下,【1楼】 zxq6 小马哈
你所说的不行,我所说的是,当垂直滚栏一开始出现时就出现在最下方

favr 发表于 2007-12-13 10:21:27

想做成一个像Debug窗口一样的东西吧,这需要一点点小技巧的:
text1.selstart=&H7FFF          ' text1.selstart=len(text1.text)
text1.seltext=newstring      ' set new string

zhzj2007 发表于 2007-12-13 10:44:08

垂直滚条一开始出现时就出现在最下方 的实现方法?

lin28 发表于 2007-12-13 12:56:47

我也想知道。。。。

zxq6 发表于 2007-12-13 13:01:48

方法肯定是可以滴,只是你没有用对。
新建一个工程,填入以下代码,建立2个必要的控件,试试看?

Option Explicit

Private Sub Command1_Click()
    Text1.Text = Text1.Text & "Text1.Text"
End Sub

Private Sub Text1_Change()
    Text1.SelStart = Len(Text1.Text)
End Sub

zhzj2007 发表于 2007-12-14 08:23:43

谢谢:zxq6 小马哈

lin28 发表于 2007-12-20 12:31:10

zxq6 小马哈   Text1.Text 显示太闪了!!!

favr 发表于 2007-12-20 12:55:48

看看三楼吧,你还当我是随便说说?知道这样用的人不多,理解为什么这样的人就凤毛麟角了。
对于每次输出一行的应用,6楼的方法是很耗时间的,原因是进行了大量的方法间文本拷贝,而3楼的方法就没有文本拷贝,效率提高n多。

lin28 发表于 2007-12-20 14:15:41

Private Sub Text1_Change()
text1.selstart=&H7FFF          ' text1.selstart=len(text1.text)
text1.seltext=newstring      ' set new string
End Sub

Text1.Text显示还是太闪啊滚动条也闪   我的是20MS接受一个数据   新手请教!!

favr 发表于 2007-12-20 14:48:02

你知道Text1_Change事件干什么的吗?象你这样用很容易造成事件循环,就是说在事件处理过程再触发相同事件(按道理text1.seltext=newstring 会触发Change事件),很容易把程序写死的,所以text1.seltext=newstring 不应该在Change事件中出现。

lin28 发表于 2007-12-20 15:04:07

Private Sub Text1_Change()
text1.selstart=&H7FFF          ' text1.selstart=len(text1.text)
End Sub

显示还是太闪啊


text1.seltext=newstring      ' set new string应该放在那呢?

怎么才能想串口调试助手那样稳定显示就好了 !

zxq6 发表于 2007-12-20 16:34:17

favr真是高手呢~
楼主,应该这样用:

Option Explicit

Private Sub Form_Load()
    Timer1.Interval = 5
End Sub

Private Sub Text1_Change()
    Text1.SelStart = Len(Text1.Text)
End Sub

Private Sub Timer1_Timer()
    Text1.SelStart = &H7FFF          ' text1.selstart=len(text1.text)
    Text1.SelText = "newstring"      ' set new string
End Sub

favr 发表于 2007-12-20 19:39:49

送佛送到西吧。
楼上这样用不说不对,但一般不这样用;应该明白:
    Text1.SelStart = &H7FFF         
    Text1.SelText = "newstring"      
这两句什么意思,文本框的SelStart方法设置文本框内选择文本的起始位置,原理上用Text1.SelStart = Len(Text1.Text)是最准确的,但就这么一条语句比较耗时间,和VB内的Len(vb_String)不一样,Text1对象的文本内容是私有的,必须通过Text接口返回真实内容,然后传递给Len函数计算(而在Len VB的String类型的变量可以直接检查String类型长度区得到,根本不用算);使用常数&H7FFF就比较简单了,反正是字符串的最后,懒得算它;第二句的意思是把新内容加到光标处(和第一句结合就是添加到文本最后),不用任何文本拷贝。
所以这两句已经包含了楼上Text1_Change事件的内容,语句放在什么地方好呢?就是你要加入新文本的地方。

wking 发表于 2009-6-24 09:58:43

大家好我是vb新手请大家多多关照,我想问一下如何才能学好vb

hyz_avr 发表于 2009-6-24 10:38:22

学好的方法就是好好学

SkyGz 发表于 2009-6-24 14:15:49

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

用API操作的方法

SendMessage Text1.hWnd, &H115, 7, 0
页: [1]
查看完整版本: 上位机中:请教个简单VB6 文本框问题