C# 简单问题:如何使标题居中? (加 50 分!真的很难吗?) (10分)

  • 主题发起人 主题发起人 hcw
  • 开始时间 开始时间
H

hcw

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使标题居中?
下面这个问题我自己找出来了,不算分了。
(如何改变 DataGrid 的字段标题?)
 
这个问题难吗?
还是分太少了?少了再加,我以为是个很简单的问题呢。
 
有两个地方肯定能找到你的答案。
www.csharpcorner.com
www.codeproject.com
-------------------------------
我不喜欢用DataGrid,所以就没收集它的例子。
 
那你用什么表格控件显示数据啊?
 
DataGrid的HerderStyle属性的HorizontalAlign属性设置成Center就行了。
 
to chinaplate:这两个站点全是英文的太困难了。
to Uther:
>>DataGrid的HerderStyle属性的HorizontalAlign属性设置成Center就行了。
我怎么没找到 HerderStyle这个属性在哪儿啊?
 
DataGrid的属性列中在下面有个样式这里的属性都是有+号的,第四个就是HerderStyle.点+号找HorizontalAlign属性改成Center就OK了
 
to Uther:
找了很久很久也没找到,我把 DataGrid 属性里的所有的 + 全点开了也没找到!你能抓个图吗?
 
你是在运行时更改还是设计时更改?
 
现在是在设计的时候更改,以后可能要在运行的时候改
 
是不是真的没人会啊?C# 用的人很少吗?
 
我过会告诉你,我现在不在机房里,两种方式我都修改过
 
好我告诉你了。你是用Dataset邦定吗,那你就在双击Dataset添加所有字段,在修改字段的caption属性,居中也有的。
 

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:很遗憾,这种简单的方法需要把Datagrid的borderstyle设为None或Single,设为3D的时候Label也会有个小边框。

一个简单的命题,带给我们思考的喜悦,祝您也一样在工作与学习中获得更多的欣喜!
----
声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。
QQ: 18349592
E-Mail: henry7685@hotmail.com
请访问本人专栏:http://www.csdn.net/develop/author/netauthor/Latitude/

 
我不用datagrid来显示数据,
我用listview来,
因为我讨厌棒定,也讨厌c#做的这个datagrid:)
可能片面了:)
未经验证。
Henry手记不错,从csdn上找找吧。找不到的话,我发给你一些。
 
格式 --- 页眉 ---水平对齐----居中
 
设计时:右键单击-〉属性生成器-〉列,可以修改列名
设计时:右键单击-〉属性生成器-〉格式-〉列-〉选中某列-〉项-〉水平对其方式
运行时:DataSet.Table[0].Columns[0].ColumnName="";
其中dataset是datagird邦定的数据集,后面的两个0根据你的实际数据情况更改
 
to wzp31:我双击 dataSet11 没有任何反应!
to chinaplate:这个问题在 C# 中这么复杂吗?真不敢相信,不过我还是会去试试的!
to spymaster:我找了很多次了,都没有找到相关的属性!这是你想像的答案还是你试过的?如果是试过的话请告诉我你所说的“格式”、“页眉”、“水平对齐”和“居中”想对应的英文名都是什么啊?我没找到。
(格式 --- 页眉 ---水平对齐----居中)
to zjxxln:请详示,你所说的属性我都找不到。
谢谢各位!
 
留个邮件地址 我的图片给你发过去
 
后退
顶部