不要用API
先计算出textbox中行数,再任意读取第N行 谁知道怎么实现 要考虑效率,因为TEXTBOX的行数可能几千行,时间不能太长

解决方案 »

  1.   

    myarray= split(text1.text,vbcrlf)
    text= myarray(n)N你就是你要的行数
      

  2.   

    用API是最快的,比用split过滤要快得多.为什么不用??
      

  3.   

    http://www.d9soft.com/article/258/Article7113_1.htm
      

  4.   

    TEXTBOX 我记得最大就 6400字节 效率应该没影响
      

  5.   

    2楼myarray定义成字符串数组吗?
    API比较不熟悉,有高手指点用API也行
      

  6.   

    计算行数:
    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
    Const EM_GETLINECOUNT = &HBA
    Private Sub Command1_Click()
    Dim LineCnt As Long
    LineCnt = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, 0)
    MsgBox LineCnt
    End Sub
      

  7.   

    TextBox中文本每行后有回车和换行符,可将TextBox中文本字符赋值给STRING字符变量。然后用SPLIT将文本内容切割赋值给String变量数组:
    Option Explicit
        Dim sj As String
    Private Sub Command1_Click()
        sj = "123" & Chr(13) & Chr(10) & "abc" & Chr(13) & Chr(10) & "bbc"
        Text1 = sj
    End SubPrivate Sub Command2_Click()
        Dim strTxt() As String
        Dim l As Integer
        Dim i As Integer
        strTxt = Split(sj, vbCrLf)
        l = UBound(strTxt)
        For i = 0 To l
            Debug.Print strTxt(i)
        Next
    End Sub
      

  8.   

    '在窗体上放一个命令按钮Command1,一个文本框控件作测试用。很简单,不复杂!Option Explicit
    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
    Private Const EM_GETLINECOUNT = &HBA
    Private Const EM_GETLINE = &HC4Private Sub Command1_Click()
            Dim str(256) As Byte
            Dim Line As Long, LineCount As Long
            str(1) = 1
            LineCount = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, 0) '取得文本框总的行数
            Debug.Print "文本框共有:" & LineCount & "行!"
            Line = 0 '第一行
            SendMessage Text1.hwnd, EM_GETLINE, Line, str(0) '取得文本指定行内容,这里line=0指第1行
            Debug.Print StrConv(str, vbUnicode)
    End Sub
    Private Sub Form_Load()
            '先设置Text1.MultiLine = True,在程序中不能设置,只能在开发状态下设置。
            Text1.Text = "1第一行" & vbCrLf
            Text1.Text = Text1.Text & "2第二行" & vbCrLf
            Text1.Text = Text1.Text & "3第三行" & vbCrLf
            Text1.Text = Text1.Text & "4第四行" & vbCrLf
            Text1.Text = Text1.Text & "5第五行" & vbCrLf
            Text1.Text = Text1.Text & "6第六行"
    End Sub