首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
wangchinaking (57)
yjz0065 (113)
coofucoo (105)
Drate (69)
lphpc (30)
smallnest (61)
iiprogram (64)
downmoon (32)
danny_xcz (49)
btbtd (81)
CSDN - 文档中心 - .NET 阅读:8697   评论: 9    参与评论
标题   Henry手记—从Datagrid的标题居中说起     选择自 Latitude 的 Blog
关键字   Datagrid .NET
出处  

                            Henry手记Datagrid的标题居中说起

                               韩睿  ( 02/20/2003)

 

编程的乐趣是什么?相信各人都有自己的见解。Henry最大的快乐是享受创造的喜悦,而且这种喜悦都是建立在可以看得到的实践上的。今天这篇小文源头很简单,是我中午在CSDN论坛上看到一个网友发的帖子,当时也回了帖,但话语不详,更重要的是下午稍稍一试,得到了两种实现的方法,不亦乐乎,尽管事务缠身,也赶紧记下。

命题:如果在.NET中使Datagrid的标题文字居中。

分析一:

这个命题似乎不难,主要是Datagrid作者没有提供CaptionAlign这样的属性给大家,所以……

那么怎么解决它呢?我想到最直接的方法,就是给标题文字前面加上适当的空格数,使标题文字推到中间去。好,说做就做。

(1)      要知道在当前环境下,Datagrid标题栏一个英文字符占据了多大的宽度;

(2)      Datagrid的宽度/字符宽度=标题栏所能容纳的字符数

(3)      给已有标题的文本前面添加n个空格,n=(标题栏所能容纳的字符数-已有标题的字符数)/2

代码如下所示:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim perWidth As Integer 一个英文字符占据的宽度

        Dim count As Integer 标题栏所能容纳的字符数

        Dim len As Integer已有标题的字符数

        Dim i As Integer

        With Graphics.FromHwnd(DataGrid1.Handle).MeasureString(Text:="ABCDEFGHIJKLMNOPQRSTUVWXYZ", Font:=DataGrid1.Font)

            perWidth = CInt(.Width / 26.0!)

        End With

        count = DataGrid1.Width / perWidth

        len = System.Text.Encoding.Default.GetByteCount(DataGrid1.CaptionText)

        For i = 1 To (count - len) / 2

            DataGrid1.CaptionText = " " + DataGrid1.CaptionText

        Next

End Sub

要点1如何计算一个英文字符的宽度,见代码

要点2如何获得标题文本所占的字符数,要知道英文占一个字节,中文是占两个字节。解决方法就是用System.Text.Encoding.Default.GetByteCount来做。这些技巧还是很有用的,望牢记!

另外,您可以用String.PadLeft属性来试试填充空字符串

结果如图一所示:

 

1 第一种方案:加空格

分析二

但认真一想,这种方法还是不爽,智能化不够,于是乎就有了这种方法。即把标题文字写入一个Label里面去,然后把Label嵌入到datagrid中去,动态地调整Label的位置,不就结了!

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        LabCaption.BackColor = Color.Transparent  设为透明色

        LabCaption.AutoSize = True ‘设为可根据文本内容自动调整文本框大小

        LabCaption.BorderStyle = BorderStyle.None ‘设为无边框

        LabCaption.ForeColor = Color.White  ‘前景色设为白色,就是文字是白色字

        DataGrid1.Controls.Add(LabCaption)  ‘将文本框嵌入Datagrid中去

        LabCaption.Top = 5‘设置高度,0指的是datagrid的头部位置

        LabCaption.Left = (DataGrid1.Width - LabCaption.Width) / 2 ‘设置居中

End Sub

 

 

2 第二种方案:嵌入文本框

从图2中我们可以看到整个的实现过程,当然也有小技巧值得一说:

要点1设置文本框底色为透明。只写一句LabCaption.BackColor = Color.Transparent是不行的,这样的话,系统会将背景色设置为Form的底色,因为透明是相对的嘛,想想变色龙的原理就明白了。我们得设置一步:LabCaption.Parent = DataGrid1这样才行,或者是和上述代码中所写的用:DataGrid1.Controls.Add(LabCaption)也可以。这里Parent属性在弹出菜单里没有,别管它,写上就行了。

要点2很遗憾,这种简单的方法需要把Datagridborderstyle设为NoneSingle,设为3D的时候Label也会有个小边框。

 

一个简单的命题,带给我们思考的喜悦,祝您也一样在工作与学习中获得更多的欣喜!

----

声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。

QQ: 18349592

E-Mail: henry7685@hotmail.com

     请访问本人专栏:http://www.csdn.net/develop/author/netauthor/Latitude/

 


相关文章
对该文的评论
CSDN 网友 ( 2005-04-08)
厉害,高手。
lisiqi ( 2004-02-14)
有意思,开阔思路啊。
zhangzhifeng8888 ( 2003-12-08)
我认为写的很好,支持!
jun_01 ( 2003-07-18)
呵呵,这种方法的确值得考虑呀。
wangshewei ( 2003-05-22)
有点意思!支持!