急!在线等待!TextBox小问题!

Ben_Young 2003-08-22 04:04:39

请问如何在VB的TextBox控件中获取和设定光标的位置。以及如何在文本框中追加。
...全文
39 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
flc 2003-08-23
  • 打赏
  • 举报
回复
学习
高手果然是高手
射天狼 2003-08-22
  • 打赏
  • 举报
回复
呵呵,共同学习~~~~
qianzi0520 2003-08-22
  • 打赏
  • 举报
回复
支持cuizm(射天狼)
Ben_Young 2003-08-22
  • 打赏
  • 举报
回复
多谢各位
lihonggen0 2003-08-22
  • 打赏
  • 举报
回复
不是呀!

获取光标的位置是第几行和第几列

SelStart 属性是做不到的


你的写程序原则是对的,尽量不用api
Ben_Young 2003-08-22
  • 打赏
  • 举报
回复
多谢各位,Text1.Text=Text1.Text & "追加的文本",太爽了.
射天狼 2003-08-22
  • 打赏
  • 举报
回复
哇塞,版主真是利害,什么都用API,
我觉得用VB写程序的原则是:
1 能用VB基本函数解决的就不要用API
2 能用基本控件解决的就不要用外部控件
3 能用API解决的尽量不要用外部控件
lihonggen0 2003-08-22
  • 打赏
  • 举报
回复

在文本框中追加:



Text1.Text = Text1.Text & "追加的文本"
射天狼 2003-08-22
  • 打赏
  • 举报
回复
问题解决~~
lihonggen0 2003-08-22
  • 打赏
  • 举报
回复
'在Form中添加一个文本框(TextBox),将其MultiLine属性设置为True,以便输入多行文本;再在Form中添加两个标题栏(Label),以便显示光标位置;然后,在Form的代码窗口中添加程序中的代码。


Option Explicit
Const EM_GETSEL = &HB0
Const EM_LINEFROMCHAR = &HC9
Const EM_LINEINDEX = &HBB

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

Public Sub GetCaretPos(ByVal TextHwnd As Long, LineNo As Long, ColNo As Long)

Dim I As Long, j As Long
Dim lParam As Long, wParam As Long
Dim k As Long

'首先向文本框传递EM_GETSEL消息以获取从起始位置到
'光标所在位置的字符数

I = SendMessage(TextHwnd, EM_GETSEL, wParam, lParam)
j = I / 2 ^ 16

'再向文本框传递EM_LINEFROMCHAR消息根据获得的字符
'数确定光标以获取所在行数

LineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, 0)
LineNo = LineNo + 1

'向文本框传递EM_LINEINDEX消息以获取所在列数

k = SendMessage(TextHwnd, EM_LINEINDEX, -1, 0)
ColNo = j - k + 1
End Sub

Private Sub Form_Load()
Dim LineNo As Long, ColNo As Long

Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End Sub

Private Sub Form_Resize()
Text1.Width = Me.ScaleWidth
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim LineNo As Long, ColNo As Long

Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End Sub

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim LineNo As Long, ColNo As Long

Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End Sub


射天狼 2003-08-22
  • 打赏
  • 举报
回复
MsgBox Text1.SelStart '取得光标的位置
Text1.SelStart = 10 '设置光标在第10个字符处
Text1.Text = Text1.Text & "追加" '在最后追加
'或者
Text1.SelText = "追加" '在光标处追加
didishu0807 2003-08-22
  • 打赏
  • 举报
回复
text1.selstart=len(text1.text)

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧