首先我们得弄明白WinForm中DataGrid的结构,可参考henry韩博士的相关文章,如:http://dev.csdn.net/develop/article/15/15686.shtm
 
    不过,即便你不看也没关系,这里简单解释一下,WinForm每个Cell默认填充一个TextBox,双击时的第一次单击点在DataGrid上,同时使TextBox获得了焦点,下一次单击结果就点到TextBox上去了,所以也就能理解为什么直接写DataGrid的双击事件只有点在行头或Cell中间才会有用了吧。
 
    那怎么解决呢,有了理论基础,解决起来就很简单了,这里有三种情况:1、点在行头或cell间,直接写双击就好了;2、第一下点在DataGrid上,第二下点在TextBox上;3、TextBox之前已经被选中,两下都点在他上面。
    方案如下:
    1、this.dataGridProjDetail.DoubleClick +=new EventHandler(dataGridProjDetail_DoubleClick)

    //双击
  private void dataGridProjDetail_DoubleClick(object sender, EventArgs e)
  {
   this.ShowCustomersDetail();
  }

    2、判断点在DataGrid上的Mouse Down和Text Box上的Mouse Up间的时间间隔是否可以被当作双击
    this.dataGridProjDetail.MouseUp +=new MouseEventHandler(dataGridProjDetail_MouseUp);

        TextCol.TextBox.MouseDown +=new MouseEventHandler(TextBoxMouseDownHandler);
  
    private void dataGridProjDetail_MouseUp(object sender, MouseEventArgs e)
  {
   time = DateTime.Now;
  }

    //判断下时间间隔
    private void TextBoxMouseDownHandler(object sender, MouseEventArgs e)
  {
   if(DateTime.Now < time.AddMilliseconds(SystemInformation.DoubleClickTime))
   {
    this.ShowCustomersDetail();
   }
  }
 

    3、 TextCol.TextBox.DoubleClick +=new EventHandler(TextBoxDoubleClickHandler);

      private void TextBoxDoubleClickHandler(object sender, EventArgs e)
  {
   this.ShowCustomersDetail();
  } 

   同时把上面的三个工作都做完了,也就实现了winform datagrid的双击啦。

   参考:http://www.microsoft.com/china/community/Column/14.mspx 

 
Posted on 2007-04-20 14:59  阿菜  阅读(1326)  评论(0)    收藏  举报