如何调整在TextBox中输入信息的位置?

解决方案 »

  1.   

    通过设置SelStart和SelLength属性值能实现比如:
    '插入点置于最后
    Text1.SelStart = Length(Text1.Text)
    Text1.SelLength = 0
    '插入点置于最前
    Text1.SelStart = 0
    Text1.SelLength = 0
      

  2.   

    呵呵,我再描述清楚点,我举个例子:
    开始我在TextBox中输入一行信息,然后回车,再输入第二行信息,但是两行信息间的行距比较宽,我想把下面的信息往上移一点,可不可以实现,就像PictureBox控件的CurrentX,CurrentY属性一样可以调整位置。
      

  3.   

    楼主描述不清晰改一下秀峰的Text1.SelStart = Len(Text1.Text)
    Text1.SelLength = 0
    Text1.SetFocus
      

  4.   

    很像很难,除非你改变字体大小,
    或者在其他控件上进行显示,比如PictureBox。
      

  5.   

    我也觉得有点难,在PictureBox上倒可以利用CurrentX,CurrentY进行定位,可以设置显示的位置,我其实也是利用TextBox输入,然后在PictureBox上显示字符串,我代码是这样写的:
    Picture1.CurrentX = 0
    Picture1.CurrentY = -Slider1.Value
    Picture1.print Text1.text
    这样我可以通过改变Slider控件的值来移动从Text1中获取的字符的显示位置
      

  6.   

    但是,这样正好也把Text1行与行之间的间距Print到了Picture1上,我就想使行之间的间距可以进行缩小。
      

  7.   

    换用richtextbox,打了sp6补丁后richtextbox支持设置行间距,用textbox的话,很麻烦,需要自绘
      

  8.   

    //但是,这样正好也把Text1行与行之间的间距Print到了Picture1上,我就想使行之间的间距可以进行缩小。这样也行,你一行行的输出即可不过,这样做的问题是涉及到滚动条的处理,而picturebox的高度限制也要解决
      

  9.   

    换用richtextbox,打了sp6补丁后richtextbox支持设置行间距
      

  10.   

    你换取textbox显示的各行内容后(参考:http://topic.csdn.net/t/20030327/00/1581656.html里6楼的回复,顺便说一下,主要看思路,他的代码有点小问题),用循环分行输出即可
      

  11.   

    用textbox估计很难做到
    用richtextbox试试,至少可以变字体大小实现,也许还支持行距的
      

  12.   

    richtextbox我用了也不支持行距啊,怎么办?急!
      

  13.   

    //richtextbox我用了也不支持行距啊,怎么办?急!看这里:
    http://www.cnblogs.com/rainstormmaster/archive/2006/02/20/333731.html
      

  14.   

    输入位置我自己解决了,但是有个问题是两行不能同时存在,因为我使用了.cls,但如果不使用.cls又不能实时移动信息和修改信息,所以有好多矛盾,请大家帮我看下代码:
    '声明
    Private Const EM_GETLINE = &HC4
    Private Const EM_LINELENGTH = &HC1
    Private Const EM_LINEINDEX = &HBB
    Private Const EM_GETLINECOUNT = &HBA
    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 Declare Sub RtlMoveMemory Lib "kernel32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    '自定义文本读取函数
    Public Sub TB_GetLine(ByVal hwnd As Long, ByVal whichLine As Long, Line As String)
            Dim Length As Long, bArr() As Byte, bArr2() As Byte, lc As Long
            lc = SendMessage(hwnd, EM_LINEINDEX, whichLine, ByVal 0&)
            Length = SendMessage(hwnd, EM_LINELENGTH, lc, ByVal 0&)
            
            If Length > 0 Then
                 ReDim bArr(Length + 1) As Byte, bArr2(Length - 1) As Byte
                 Call RtlMoveMemory(bArr(0), Length, 2)
                 Call SendMessage(hwnd, EM_GETLINE, whichLine, bArr(0))
                 Call RtlMoveMemory(bArr2(0), bArr(0), Length)
                 Line = StrConv(bArr2, vbUnicode)
            Else
                 Line = ""
            End If
    End SubPrivate Sub Text1_Change()
        I = SendMessage(Text1.hwnd, &HB0&, 0, 0)
        j = I / 2 ^ 16
        lineno = SendMessage(Text1.hwnd, &HC9&, j, 0)
        If lineno = 0 Then
            Dim str1 As String
            Call TB_GetLine(Text1.hwnd, 0, str1)
            Picture1.Cls
            Picture1.CurrentX = 0
            Picture1.CurrentY = -(Slider1.Value - 1)
            Picture1.Print str1
            Picture1.FontName = Text1.FontName
            Picture1.FontSize = Text1.FontSize
            Picture1.ForeColor = Text1.ForeColor
        Else
            Dim str2 As String
            Call TB_GetLine(Text1.hwnd, 1, str2)
            Picture1.CurrentX = 0
            Picture1.CurrentY = 4
            Picture1.Print str2
            Picture1.FontName = Text1.FontName
            Picture1.FontSize = Text1.FontSize
            Picture1.ForeColor = Text1.ForeColor
        End If    
        Picture2.PaintPicture Picture1.Image, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, vbSrcCopy
    End SubPrivate Sub Timer1_Timer()
        Text1_Change
    End Sub