如题.比如说我的TEXT里面有如下内容:
1234
12345
123456
回车后我要把12345换成54321(只修改第二行)先跟大家说说我的解决方案:
1.  用VB内置的REPLCE函数,可以更换字符串中的某个字符.但这个函数有这个问题,会把起始位置前的字符全部截掉.所以抛弃
2.  用sendmessage函数,得出输入字符的起始位置,再得出这一行有多少个字符.把之前的全取出来,再把之后的取出来,处理好后再全部连接起来.但这个方案有个不好的地方,就是如果TEXT里面的内容很多的话,这个方案就会有些慢,尤其是别人回一下车,就有延迟,会造成一些不好的感觉.所以在些求高手一个解决方案.不写代码也可以.如果不懂的别灌水了!(不知道sendmessage里面有没有常数是修改某行内容的) 

解决方案 »

  1.   

    如果只修改第二行的话
    Private Sub Command1_Click()
    Dim s$()
    s = Split(Form1.Text1.Text, vbCrLf)
    s(1) = Replace(s(1), "12345", "54321")
    MsgBox Join(s, vbCrLf)
    End Sub
      

  2.   

    以回车换行判断行数,然后取出这行数据mid(...),将其临时保存到一个变量,处理,再放回.
    用不着replace和sendmessage
      

  3.   


    dim StrAry() as string
    'index 要修改的行,你的第2行
    'value 要赋的值,你的54321
    with text1
    strary = split(.text)
    strAry(index-1) = value
    .text = join(StrAry,vbcrlf)
    end with
    'erase StrAry
      

  4.   

    "2.  用sendmessage函数"
    只能直接取行,不能直接替换行,要用这样的多个API才能搞定的:procedure TMemoStrings.Put(Index: Integer; const S: string);
    var
      SelStart: Integer;
    begin
      SelStart := SendMessage(Memo.Handle, EM_LINEINDEX, Index, 0);
      if SelStart >= 0 then
      begin
        SendMessage(Memo.Handle, EM_SETSEL, SelStart, SelStart +
          SendMessage(Memo.Handle, EM_LINELENGTH, SelStart, 0));
        SendMessage(Memo.Handle, EM_REPLACESEL, 0, Longint(PChar(S)));
      end;
    end;
      

  5.   

    Replace 可以做到Text1 = Replace(Replace(Text1, " ", ""), "12345" & vbCrLf, "54321" & vbCrLf)
      

  6.   

    之前1楼的代码是针对指定行里面指定字符串替换。如果是整行替换的话,稍加修改。
    方法1:Private Sub Command1_Click()
    Dim s$(), i& 'i指定行
    i = 2
    s = Split(Form1.Text1.Text, vbCrLf)
    s(i - 1) = "54321" '替换值
    MsgBox Join(s, vbCrLf)
    End Sub方法2:Private Sub Command1_Click()
    Dim s$, n&, m&, s1$, s2$
    n = 2 '指定行
    s = Form1.Text1.Text
    For i = 1 To n - 1
        m = InStr(m + 1, s, vbCrLf)
    Next i
    s1 = Left(s, m)
    s2 = Mid(s, InStr(m + 1, s, vbCrLf))
    MsgBox s1 & "54321" & s2
    End Sub
      

  7.   

    Dim s as String
    Dim i as Long
    s=Text1.Text
    i=InStr(s,"12345")
    if i>0 then Mid(s,i,5)="54321"
    Text1.Text=s
      

  8.   

    Option Explicit
    Dim aa$, i&, S
    Private Sub Command1_Click()
       aa = "1234" & vbCrLf & "12345" & vbCrLf & "123456"
       S = Split(aa, vbCrLf)
       S(1) = StrReverse(S(1))
       aa = Join(S, vbCrLf)
       MsgBox aa
    End Sub