急:怎样把文本框的内容按显示情形一行行放到一个数组里面?
文本框的Multiline属性为True,但没有水平和垂直滚动条。请问怎样把它的内容按实际显示情形一行行放到一个数组里面?
谢谢!
问题点数:20、回复次数:8Top
1 楼aiur2000(破愿立志别故里,荆棘南下思北风)回复于 2003-12-02 16:58:32 得分 2
Dim b() As String
Private Sub Command1_Click()
ReDim b(10)
a = Text1.Text
b = Split(a, vbCrLf, -1, 1)
For i = LBound(b) To UBound(b)
MsgBox b(i)
Next
End SubTop
2 楼SoHo_Andy(冰)回复于 2003-12-02 17:03:29 得分 3
aiur2000(杀破狼) 的方法只能用于回车换行的,textbox自动换行是没有回车换行符的
这样行不通Top
3 楼kissoflife(明月高楼休独倚,酒入愁肠,化作相思泪!)回复于 2003-12-02 20:04:25 得分 0
多谢楼上两位。
我用换行符试过,分不开。
请继续指点!Top
4 楼Apple200228(Apple)回复于 2003-12-02 21:21:45 得分 13
用API读取TextBox的每行数据,赋值到属组中。
函数如下:
Public 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 Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long)
Public Const HT_CAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const EM_GETLINECOUNT = &HBA
Public Const EM_LINEINDEX = &HBB
Public Const EM_LINELENGTH = &HC1
Public Const EM_GETLINE = &HC4
Public Function GetPosChar(ByVal Row As Long, ByVal txtName As TextBox) As String
Dim pos As Long
Dim Length As Integer
Dim strChar As String
pos = SendMessage(txtName.hwnd, EM_LINEINDEX, Row, ByVal 0&)
Length = SendMessage(txtName.hwnd, EM_LINELENGTH, pos, ByVal 0&)
strChar = ""
If Length > 0 Then
strChar = String(Length, Chr(0))
RtlMoveMemory ByVal strChar, Length, 2
SendMessage txtName.hwnd, EM_GETLINE, Row, ByVal strChar
End If
GetPosChar = strChar
End FunctionTop
5 楼MrRedSnow(慕容红雪)回复于 2003-12-02 21:30:34 得分 2
楼主用的textbox估计是multiline=true的,所以实际上换行的位置根本就没有vbcrlf。Top
6 楼kissoflife(明月高楼休独倚,酒入愁肠,化作相思泪!)回复于 2003-12-02 21:34:50 得分 0
非常感谢 Apple200228(Apple),你这代码确实好用。
但还有一个问题,那就是怎么知道文本框有多少行呢?如何判断已经是最后一行了呢?
Top
7 楼kissoflife(明月高楼休独倚,酒入愁肠,化作相思泪!)回复于 2003-12-02 22:20:25 得分 0
呵呵,已经知道了:
intCount = SendMessage(txtName.hwnd, EM_GETLINECOUNT, 0, 0)Top
8 楼czjt0602(jack)回复于 2003-12-03 00:05:35 得分 0
知道了就散分嘛!!!!Top




