第1部分:应用场景
其实搞这个,比较想骂人,因为这个是客户提的需求,当然,提需求归提需求,都接了,但是无理取闹的找茬,就很恶心了,算了,反正提高自己技能,还是那句话“假如你被狗咬了,难道你还想要回去不成”。场景是这样,由于用了C1TrueDBGrid控件展现表格,而客户提出点击某行,首列的勾选就自动改变状态,一开始我使用的是C1TrueDBGrid.Click事件,但是有个比较麻烦的是,在空白点击,这个事件也是会触发的,所以客户提出点击空白区域=无操作的需求,下面谈谈如何实现。
第2部分:解决方案
思路就是:改成使用MouseUp事件,然后关联鼠标坐标,获取这个坐标对应单元格坐标,这个单元格坐标的x如果是负数,说明是空白区域,否则是网格内容区域,代码如下:
Private Sub C1TrueDBGrid1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles C1TrueDBGrid1.MouseUp Try Dim Grid As C1.Win.C1TrueDBGrid.C1TrueDBGrid = CType(sender, C1.Win.C1TrueDBGrid.C1TrueDBGrid) rem 使用PointToClient计算鼠标相对于某个控件的坐标 Dim p As Point = Grid.PointToClient(Control.MousePosition) Dim curRowCol As Point = New Point(Grid.ColContaining(p.X), Grid.RowContaining(p.Y)) Dim str As String = String.Format("({0},{1})", curRowCol.Y, curRowCol.X) If curRowCol.X > 0 Then If Me.C1TrueDBGrid1.Columns("选择").Value & "" = "True" Then Me.C1TrueDBGrid1.Columns("选择").Value = 0 Else Me.C1TrueDBGrid1.Columns("选择").Value = 1 End If C1TrueDBGrid1.UpdateData() End If Catch ex As Exception MsgBox(ex.Message + vbCrLf + ex.StackTrace, MsgBoxStyle.Information, My.Application.Info.ProductName) End Try End Sub
visual basic(vb.net)应用C1TrueDBGrid控件如何实现网格区域点选空白区域无操作的结论
通过上面这段代码,就可以很好的实现。
© 版权声明
THE END
暂无评论内容