紧急求救:让VB中textbox文本框中的内容垂直居中!(很急的呀!)
请教各位老大:怎么让文本框中的内容垂直居中?
我现在做到的项目中,需要这样做!必须得这么做!
各位出招吧,或给点建议也行!
(这个问题以前在坛子里也出现过,但没有人回答!但我还是抱有一丝希望!)
问题点数:20、回复次数:15Top
1 楼starsoulxp(星魂)回复于 2004-11-03 19:38:44 得分 0
垂直的可以用字体,有一系列字体是竖着的,没安vb,名字忘了Top
2 楼starsoulxp(星魂)回复于 2004-11-03 19:39:42 得分 0
居中用align属性试试
建议用richtextboxTop
3 楼homezj(小吉)回复于 2004-11-03 20:02:11 得分 4
TextBox没有垂直居中的功能,因为其中文本是按行垂直定位的,文本无法跨行显示。而且一般设定多行属性后,文本是可以上下滚动的,垂直居中就无从谈起了。
所以不知你是什么目的,若仅仅是为显示出来的东西有文本框效果,又想垂直居中美观一些的话,完全可用PictureBox代替。Top
4 楼vodlinux(好易用)回复于 2004-11-03 20:35:54 得分 0
同意楼上! 说得好!Top
5 楼leongwong()回复于 2004-11-04 13:14:41 得分 0
谢谢楼上的各位!我是在做一个控件时遇到这个问题的!财务软件中(如用友)凭证录入时的红色金额线!由于TextBox无法实现内容的垂直居中,严重影响美观!目前还在寻找方法!Top
6 楼homezj(小吉)回复于 2004-11-04 13:33:32 得分 4
方法可能有很多,我提一个思路:
如果你的垂直居中TextBox,需要有等待录入文字的作用,那可把一个单行TextBox放入一个容器中(Frame或PictureBox都行),让TextBox在容器中垂直居中,把容器做成你需要的文本框模样,若还想让TextBox不露痕迹与容器溶为一体,可把它边框去掉,背景色与容器设成一样。想再完善一点,编程使容器获得焦点时,自动把光标移至TextBox上
若没有等待录入文字的需求,根本就不需用TextBoxTop
7 楼sinall()回复于 2004-11-04 14:05:27 得分 2
http://community.csdn.net/Expert/topic/3444/3444880.xml?temp=.6252863Top
8 楼BlueBeer(1win)回复于 2004-11-04 14:28:54 得分 0
textbox的内容多不多?我倒收藏过一个使单行文本的textbox垂直居中的代码Top
9 楼leongwong()回复于 2004-11-05 14:25:03 得分 0
textbox内容不多的,只是输入阿拉伯数字!
楼上的这位赐教!Top
10 楼leongwong()回复于 2004-11-05 14:46:07 得分 0
sinall()说的贴子,我已经看过了!用那个方法可以实现,可是不太明显!如果实在没有的话,也只有那么考虑了!Top
11 楼leongwong()回复于 2004-11-05 14:48:48 得分 0
homezj(小吉)的思路很好,我也在试!等有了结果我会告诉大家的!
我就搞不懂,这个球textbox咋就没有垂直居中这个属性呢!Top
12 楼CatchWind(追風少年)回复于 2004-11-05 15:16:35 得分 0
我有一個自己寫的控件,要的話發Email給我.CatchWind@163.comTop
13 楼BlueBeer(1win)回复于 2004-11-06 14:08:02 得分 10
试试看
'TextBox的MultiLine必须设为True
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
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
Sub VerMiddleText(mText As TextBox)
If mText.MultiLine = False Then Exit Sub
Dim rc As RECT, tmpTop As Long, tmpBot As Long
SendMessage mText.hwnd, EM_GETRECT, 0, rc
With Me.Font
.Name = mText.Font.Name
.Size = mText.Font.Size
.Bold = mText.Font.Bold
End With
tmpTop = ((rc.Bottom - rc.Top) - _
(mText.Parent.TextHeight("H") \ Screen.TwipsPerPixelY)) \ 2 + 2
tmpBot = ((rc.Bottom - rc.Top) + _
(mText.Parent.TextHeight("H") \ Screen.TwipsPerPixelY)) \ 2 + 2
rc.Top = tmpTop
rc.Bottom = tmpBot
mText.Alignment = vbCenter
SendMessage mText.hwnd, EM_SETRECTNP, 0&, rc
mText.Refresh
End Sub
Private Sub Form_Load()
VerMiddleText Text1
End SubTop
14 楼xiaotanghl(夜的影子)回复于 2004-11-06 15:05:58 得分 0
其实我觉得很简单,应该有好几种方法的:
1、用一个Label代替显示,单击时出来一个文本框就可以了。
2、数据保存起来,显示的是经过处理的数据,并不难;例如:值="232323",显示:=" 232323"
3、用一个类模块把文本框包装一下,可以用上面的原理。Top
15 楼leongwong()回复于 2004-11-07 22:04:57 得分 0
BlueBeer(1win) 的方法可以实现垂直居中,万分感谢!同时,也感谢楼上的各位!Top




