全是winform下的问题1:求一个字体的宽度
我是这样搞的
(int)Math.Ceiling(graphics.MeasureString("王王王",this.Font).Width)-
(int)Math.Ceiling(graphics.MeasureString("王王",this.Font).Width);得来的。还有好法没???2:怎么才能让winform里的datagrid没有垂直滚动条????不要通过设rows数这种方法。3怎么才能双击header里的网格线没反应.
默认情况是这样的。一双击列头里的网格竖线,这个列就宽一点。不想让这种情况出现,怎么搞一下呀?????????????????????
我是这样搞的
(int)Math.Ceiling(graphics.MeasureString("王王王",this.Font).Width)-
(int)Math.Ceiling(graphics.MeasureString("王王",this.Font).Width);得来的。还有好法没???2:怎么才能让winform里的datagrid没有垂直滚动条????不要通过设rows数这种方法。3怎么才能双击header里的网格线没反应.
默认情况是这样的。一双击列头里的网格竖线,这个列就宽一点。不想让这种情况出现,怎么搞一下呀?????????????????????
默认情况是这样的。一双击列头里的网格竖线,这个列就宽一点。不想让这种情况出现,怎么搞一下呀?????????????????????
=>你可以在DataGrid外面套一个panel,然后按比例和这个panel捆绑起来,不过这样做的意义不大。你如果不通过设rows数这种方法,估计比较难实现,和datagrid设计的思想有冲突。3:怎么才能双击header里的网格线没反应.
默认情况是这样的。一双击列头里的网格竖线,这个列就宽一点。不想让这种情况出现,怎么搞一下呀?????????????????????
=〉可能你要重载DataGrid
默认情况是这样的。一双击列头里的网格竖线,这个列就宽一点。不想让这种情况出现,怎么搞一下呀?????????????????????
Protected Override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{If (Me.HitTest(e.x,e.y).Type = DataGrid.HitTestType.ColumnResize) Then
return;
Else
base.OnDoubleClick(e);
}
Protected Override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{If (Me.HitTest(e.x,e.y).Type = DataGrid.HitTestType.ColumnResize) Then
return;
Else
base.OnMouseDown(e);
}
这样做也不允许用户通过拖动来改变列宽,如果要保留这个功能,可以按照以下写法
Public Class MYGRID
Inherits DataGrid Protected Override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
Static _time As DateTime
If Me.HitTest(e.X, e.Y).Type = DataGrid.HitTestType.ColumnResize AndAlso SystemInformation.DoubleClickTime > (Now.TimeOfDay.TotalMilliseconds - _time.TimeOfDay.TotalMilliseconds) Then
Exit Sub
Else
MyBase.OnMouseDown(e)
_time = Now
End If
End Sub
End Class
sorry楼主,这个vb.net代码我不会转化到c#中,楼主包涵
{
private DateTime _time;
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
if ((this.HitTest(e.X, e.Y).Type.Equals(DataGrid.HitTestType.ColumnResize)) && (SystemInformation.DoubleClickTime > (Now.TimeOfDay.TotalMilliseconds - _time.TimeOfDay.TotalMilliseconds)))
return;
else
{
base.OnMouseDown(e);
_time = Now;
}
}
}
琢磨出来了:)第一个问题我没有这么用过。只有需要measure的时候,把string measure一下就行了。
第二个问题能否在垂直滚动条处加一个label,label的backcolor=datagrid.parent.backcolor,label.bringtofront。这样不管datagrid有没有滚动条都看不见。
using System.Windows.Forms;public class mydataGrid: DataGrid
{
public mydataGrid()
{
this.VertScrollBar.Visible=false;//隐藏垂直滚动条
}
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
Point p1 = new Point(e.X, e.Y);
HitTestInfo hti = this.HitTest(p1);
if( hti.Type ==HitTestType.ColumnResize)
return;
base.OnMouseDown(e);
}
}
这个问题,我正在搞。我所说单个字的宽,用我哪种方法得到的二个字的宽a,和三个字的宽。一减得出来的一个字的宽b,
但是b!=a/2,,,,用我哪种方法得出来的一个字的宽打印的时候准。哪个方法能狠简单的求出一个字体的宽呢
倒是垂直滚动条不能隐藏
this.VertScrollBar.Visible=false;//隐藏垂直滚动条
试了不行,改为:
this.VertScrollBar.Width=0;