Datagrid事件响应

时间:2010-03-15 12:19:06  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:由于Datagrid的集合性结构(这在拙作Datagrid结构剖析系列文章中已经详细说明了),使得用户不清楚鼠标响应的响应区与处理者。请看图1:             图1 Datagrid响应区命名      1. 单击事件      如果用户要单击datagrid来激发某相应事件,可以使用...
  正文: 本文主要介绍.net Datagrid控件的事件响应,关于事件响应机制问题请参见拙作《Windows 窗体引介(二) 》。本文讨论的是Datagrid的鼠标响应与键盘响应问题:
  
  一、鼠标响应
  
  由于Datagrid的集合性结构(这在拙作Datagrid结构剖析系列文章中已经详细说明了),使得用户不清楚鼠标响应的响应区与处理者。请看图1:
  
  
  
   图1 Datagrid响应区命名
  
  1. 单击事件
  
  如果用户要单击datagrid来激发某相应事件,可以使用Datagrid.HitTest方法来获得单击在Datagrid上的位置,必由系统通知您单击在何处。如下代码
  
   Private Sub DataGrid1_MouseDown(ByVal sender As Object, ByVal e As _
  
  System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseDown
  
   Dim myGrid As DataGrid = CType(sender, DataGrid)
  
   Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
  
   hti = myGrid.HitTest(e.X, e.Y)
  
   Select Case hti.Type '以下展示的是该类型枚举的全部内容
  
   Case System.Windows.Forms.DataGrid.HitTestType.None
  
   MsgBox("你单击的是背景")
  
   Case System.Windows.Forms.DataGrid.HitTestType.Cell
  
   MsgBox("你单击的单元格位于行:" & hti.Row & ", 列:" & hti.Column)
  
   Case System.Windows.Forms.DataGrid.HitTestType.ColumnHeader
  
   MsgBox("你单击的是第" & hti.Column & "列的列头")
  
   Case System.Windows.Forms.DataGrid.HitTestType.RowHeader
  
   MsgBox("你单击的是第" & hti.Row & "行的行头")
  
   Case System.Windows.Forms.DataGrid.HitTestType.ColumnResize
  
   MsgBox("你单击的是第" & hti.Column & "列的边框")
  
   Case System.Windows.Forms.DataGrid.HitTestType.RowResize
  
   MsgBox("你单击的是第" & hti.Row & "行的边框")
  
   Case System.Windows.Forms.DataGrid.HitTestType.Caption
  
   MsgBox("你单击的是标题 ")
  
   Case System.Windows.Forms.DataGrid.HitTestType.ParentRows
  
   MsgBox("你单击的是父行 ")
  
   End Select
  
   End Sub
  
  2. 双击事件(感谢acptvb网友的帮助)
  
  在上面的单击事件中稍加修改,就可得到双击事件,只需要在sub里加入如下的判断语句:
  
   If e.Button = MouseButtons.Left And e.Clicks = 2 Then
  
  Dim myGrid As DataGrid = CType(sender, DataGrid)
  
   …
  
  End Select
  
  End If
  
  您再试一下运行,却发现其它一切正常,只有单元格双击事件获得不到,这是什么原因呢?道理很简单,就是在您第一次单击cell时,datagrid还可以获得消息,但是单击的结果是使焦点落入了您单击的那个cell中去了,您的第二次鼠标点击事件的响应者就不再是datagrid,而是cell中的textbox了。(如果不是很理解这个,请看一下我专栏中的datagrid结构剖析文章)。那么怎么样通知datagrid还有一次本属于双击cell事件的第二次点击呢?首先我们应该明晰何谓两次单击与双击,它们的区别就在于鼠标点击两下之间的时间间隔,间隔短的就是双击事件,达到一定长度后就被视为是两次单击(时间间隔的设定其实是可以人工完成的,在您机器的“控制面板”中有“鼠标”一项,里面就有调整这个时间间隔的工具)。这个时间设定完毕后,可以通过SystemInformation.DoubleClickTime方法去获得。

Datagrid事件响应》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13237.html


关键字:

关于《Datagrid事件响应》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td