最近学着写一个报表系统, 结果在一个输入表中textbox 输入的数字在文本框上面,不是居中,挺难看的请问如何设置文本才能上下居中呢?(要设置只能输入单行数字)最好举例 谢谢!!

解决方案 »

  1.   

    报表系统的文本框和是用的普通的textbox吗,如是,我觉得你需要设计一个用户控件,按你自己的需求;)
    事实上,我除了看明白你说的上下居中的意思外,对你的总的意思并不明白.
    就怕像昨天这人的帖子一样,讨论到后来还是发现他的需求没完全定义好;)http://topic.csdn.net/u/20100221/01/b77c6acb-79ca-44c0-a16c-ed3ec1edab38.html
    如何循环模拟用键盘输入List1列表中的内容
      

  2.   

    记住,设置 Text1 的 Multiline = TrueDim aa As String, i As Integer, jj As Integer, maxline As Integer, LineCnt As Long
    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 = &HBAPrivate Sub Form_Load()
    '窗体与Command1居中
    Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
    Command1.Move (Me.Width - Command1.Width) \ 2, Text1.Height + Text1.Top + 200
    Command1.Caption = "居中显示"
    'Text1.Alignment = 2 'TextBox 水平居中显示
    'aa = "Attn:楼主"
    'aa = aa & Chr(13) & Chr(10)
    'aa = aa & "呵呵你的问题都好奇怪,但也让我学了不少!"
    'aa = aa & Chr(13) & Chr(10)
    'aa = aa & "我也想不出其它的好方法"
    'aa = aa & Chr(13) & Chr(10)
    aa = aa & "你认为这样行吗?"
    Text1.Text = aa
    End SubPrivate Sub Command1_Click()
    LineCnt = TextBoxLineCnt(Text1)
    '每增加一行加上180,当然是以默认的字体大小而言
    maxline = Text1.Height \ 180 '计算textbox能装下几行
    jj = (maxline - LineCnt) \ 2 '垂直居中,(textbox总行数-Text1的总行数)整除2
    For i = 1 To jj '装上几行空白
    Text1.Text = Chr(13) & Chr(10) & Text1.Text
    Next i
    MsgBox "总共有" & CStr(LineCnt) & "行文字,看看垂直居中了吗?"
    End SubPublic Function TextBoxLineCnt(ctl As TextBox) As Long '计算总行数的函数
    TextBoxLineCnt = SendMessage(ctl.hwnd, EM_GETLINECOUNT, 0, 0)
    End Function
      

  3.   

    这个编程根本无法实现(试试文本框一行半文本高度时,写一行文本,看它的垂直位置)。把picturebox作textbox的容器,把背景色改为白色,把textbox的3d及边框去掉,然后在picturebox中上下居中,去模拟文本垂直居中。
      

  4.   

    方法很多,API:同样,记住,设置 Text1 的 Multiline = True 模块中:
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPublic Const EM_SETRECTNP = &HB4
    Public Const EM_GETLINECOUNT = &HBA
    Public Const ES_CENTER = &H1&Public Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypePublic Sub VerMiddleText(mText As TextBox)If mText.MultiLine = False Then Exit Sub
    Dim rc As RECT, tmpTop As Long, tmpBot As Long, L As Long, FontHeight As Long, H As Long, W As LongL = SendMessage(mText.hwnd, EM_GETLINECOUNT, 0&, rc)
    FontHeight = Form1.ScaleY(mText.FontSize / 72, 5, 3)
    H = Form1.ScaleY(mText.Height, 1, 3)
    W = Form1.ScaleY(mText.Width, 1, 3)
    tmpTop = (H - L * FontHeight) / 2 - 3tmpBot = tmpTop + (L + 1) * FontHeight
    With rc
    .Top = tmpTop
    .Bottom = tmpBot
    .Left = 1
    .Right = W - 3
    End WithSendMessage mText.hwnd, EM_SETRECTNP, 0&, rc
    mText.RefreshEnd Sub窗体中:
    Private Sub Command1_Click()
    VerMiddleText Text1
    End Sub(试试文本框一行半文本高度时,写一行文本,看它的垂直位置)。 
      

  5.   

    picturebox.ScaleMode = vbPixels
    picturebox.CurrentX = 8
    picturebox.CurrentY = 1
    picturebox.print "文字";
      

  6.   

    对了,我看这个用户控件可能适合你
    http://www.cnblogs.com/lxcc/archive/2005/08/08/209938.html
    自定义TextBox控件对齐方式为为垂直居中 
      

  7.   

    自定义TextBox控件对齐方式为为垂直居中 
    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_GETRECT = &HB2
    Private Const EM_SETRECTNP = &HB4
    Private Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypePrivate Function SetVCenterText(userdefineTextBox As TextBox)   Dim rc As RECT   Dim UserControlTop As Long   Dim UserControlBottom As Long   If userdefineTextBox.MultiLine = False Then Exit Function   Call SendMessage(userdefineTextBox.hwnd, EM_GETRECT, 0, rc)   UserControlTop = ((rc.Bottom - rc.Top) - (UserControl.Parent.TextHeight("H") \ Screen.TwipsPerPixelY)) \ 2   UserControlBottom = ((rc.Bottom - rc.Top) + (UserControl.Parent.TextHeight("H") \ Screen.TwipsPerPixelY)) \ 2   rc.Top = UserControlTop   rc.Bottom = UserControlBottom   userdefineTextBox.Alignment = vbCenter   Call SendMessage(userdefineTextBox.hwnd, EM_SETRECTNP, 0&, rc)   userdefineTextBox.Refresh
    End FunctionPrivate Sub UserControl_Resize()
        Text1.Top = 0
        Text1.Left = 0
        Text1.Height = UserControl.Height
        Text1.Width = UserControl.Width
        
        SetVCenterText Text1
    End Sub