全是winform下的问题1:求一个字体的宽度
我是这样搞的
(int)Math.Ceiling(graphics.MeasureString("王王王",this.Font).Width)-
(int)Math.Ceiling(graphics.MeasureString("王王",this.Font).Width);得来的。还有好法没???2:怎么才能让winform里的datagrid没有垂直滚动条????不要通过设rows数这种方法。3怎么才能双击header里的网格线没反应.
默认情况是这样的。一双击列头里的网格竖线,这个列就宽一点。不想让这种情况出现,怎么搞一下呀?????????????????????

解决方案 »

  1.   

    3怎么才能双击header里的网格线没反应.
    默认情况是这样的。一双击列头里的网格竖线,这个列就宽一点。不想让这种情况出现,怎么搞一下呀?????????????????????
      

  2.   

    垂直滚动条:http://search.csdn.net/Expert/topic/2293/2293055.xml?temp=.655987
      

  3.   

    2:怎么才能让winform里的datagrid没有垂直滚动条????不要通过设rows数这种方法
    =>你可以在DataGrid外面套一个panel,然后按比例和这个panel捆绑起来,不过这样做的意义不大。你如果不通过设rows数这种方法,估计比较难实现,和datagrid设计的思想有冲突。3:怎么才能双击header里的网格线没反应.
    默认情况是这样的。一双击列头里的网格竖线,这个列就宽一点。不想让这种情况出现,怎么搞一下呀?????????????????????
    =〉可能你要重载DataGrid
      

  4.   

    楼上的,我的datagrid就是重载后的。但是重写哪个方法
      

  5.   

    3怎么才能双击header里的网格线没反应.
    默认情况是这样的。一双击列头里的网格竖线,这个列就宽一点。不想让这种情况出现,怎么搞一下呀?????????????????????
      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);
          }
      

  6.   

    刚才写错了一个函数:)  
    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#中,楼主包涵
      

  7.   

    public class MYGRID:DataGrid
    {
    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有没有滚动条都看不见。
      

  8.   

    using System;
    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);
    }
    }
      

  9.   

    兄弟看了你第一个回答。第三个问题,搞定了。真的太谢谢了。第二个问题,不能把哪条挡上。出现条整个的grid宽度变了,不能让它宽度变,所以就不能让条出现。
    这个问题,我正在搞。我所说单个字的宽,用我哪种方法得到的二个字的宽a,和三个字的宽。一减得出来的一个字的宽b,
    但是b!=a/2,,,,用我哪种方法得出来的一个字的宽打印的时候准。哪个方法能狠简单的求出一个字体的宽呢
      

  10.   

    不会吧,我也试过了,当鼠标点那条时,就返回了,根本不能拖,所以列宽不会变,怎么会整个表会宽?
    倒是垂直滚动条不能隐藏
    this.VertScrollBar.Visible=false;//隐藏垂直滚动条
    试了不行,改为:
    this.VertScrollBar.Width=0;