在DataGrid与ADODC控件相连接后,我想双击一条记录,让PictureBox显示该条记录的照片,但是在Private Sub DataGrid1_DblClick()里设置的话,鼠标没有选中记录的情况下双击时也响应了(当鼠标双击DataGrid的空白地方),也显示了照片!
怎样让鼠标没有选中时不响应双击事件呢?

解决方案 »

  1.   

    Private Sub DataGrid1_DblClick()
      if rs.not bof and rs.not eof then
        ...
      end if
    end sub
      

  2.   

    不好意思,脑子灌水了。
    Private Sub DataGrid1_DblClick()
      if not rs.bof and not rs.eof then
        ...
      end if
    end sub
      

  3.   

    Private Sub dgAssetFind_DblClick()  
       If dgAssetFind.Row < 0 Then
            Exit Sub
        End If
          。

    End Sub
      

  4.   

    错了
    Private Sub dgAssetFind_DblClick()  
       If dgAssetFind.Row =< 0 Then
            Exit Sub
        End If
          。

    End Sub
      

  5.   

    这种方法不行,当DataGrid与ADODC控件相连接执行后,它默认当前记录为第一个记录,故not rs.bof and not rs.eof 和dgAssetFind.Row < 0 均为真,当记录较少时,DataGrid的窗体有大部分空余,当鼠标双击这些空余的区域(该区域没有记录)时,照样响应双击事件!
      

  6.   

    在选取行标头或者列标头时,这一行或者列就变成高亮状态了吗,请问这时DataGrid是响应时么事件的呢?
      

  7.   

    Option Strict Off
    Option Explicit On Imports Microsoft.VisualBasic
    Imports System
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Windows.FormsNamespace DataGridDoubleClick
        Public Class Form1
            Inherits Form
            Private WithEvents dataGrid1 As DataGrid
            Private WithEvents myDataSet As DataSet
            Private gridMouseDownTime As DateTime
            Private components As Container    Public Sub New()
          MyBase.New()
          InitializeComponent()
          gridMouseDownTime = DateTime.Now
          SetUp()    End Sub
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)      If disposing Then
            If (Not (components) Is Nothing) Then
              components.Dispose()
            End If
          End If
          MyBase.Dispose(disposing)    End Sub
        Private Sub SetUp()
          MakeDataSet()
          dataGrid1.SetDataBinding(myDataSet, "Customers")
          AddCustomDataTableStyle()
        End Sub
        Private Sub MakeDataSet()
          myDataSet = New DataSet("myDataSet")
          Dim tCust As DataTable
          tCust = New DataTable("Customers")
          Dim cCustID As DataColumn
          cCustID = New DataColumn("custID")
          Dim cCustName As DataColumn
          cCustName = New DataColumn("custName")
          Dim cCurrent As DataColumn
          cCurrent = New DataColumn("custCity")
          tCust.Columns.Add(cCustID)
          tCust.Columns.Add(cCustName)
          tCust.Columns.Add(cCurrent)
          myDataSet.Tables.Add(tCust)
          Dim newRow1 As DataRow
          Dim i As Integer
          i = 1      Do While (i < 4)
            newRow1 = tCust.NewRow
            newRow1("custID") = i.ToString()
            tCust.Rows.Add(newRow1)
            i = (i + 1)
          Loop
          tCust.Rows(0)("custName") = "【孟宪会之精彩世界】"
          tCust.Rows(1)("custName") = "net_lover"
          tCust.Rows(2)("custName") = "http://xml.sz.luohuedu.net/"
          tCust.Rows(0)("custCity") = "北京"
          tCust.Rows(1)("custCity") = "上海"
          tCust.Rows(2)("custCity") = "河南"    End Sub
        Private Sub AddCustomDataTableStyle()      Dim ts1 As DataGridTableStyle
          ts1 = New DataGridTableStyle()
          ts1.MappingName = "Customers"
          ts1.AlternatingBackColor = Color.LightGray      Dim TextCol As DataGridTextBoxColumn
          TextCol = New DataGridTextBoxColumn()
          TextCol.MappingName = "custID"
          TextCol.HeaderText = "序号"
          TextCol.Width = 100      AddHandler TextCol.TextBox.MouseDown, New MouseEventHandler(AddressOf TextBoxMouseDownHandler)
          AddHandler TextCol.TextBox.DoubleClick, New EventHandler(AddressOf TextBoxDoubleClickHandler)
          ts1.GridColumnStyles.Add(TextCol)
          TextCol = New DataGridTextBoxColumn()
          TextCol.MappingName = "custName"
          TextCol.HeaderText = "姓名"
          TextCol.Width = 100      AddHandler TextCol.TextBox.MouseDown, New MouseEventHandler(AddressOf TextBoxMouseDownHandler)
          AddHandler TextCol.TextBox.DoubleClick, New EventHandler(AddressOf TextBoxDoubleClickHandler)
          ts1.GridColumnStyles.Add(TextCol)
          TextCol = New DataGridTextBoxColumn()
          TextCol.MappingName = "custCity"
          TextCol.HeaderText = "地址"
          TextCol.Width = 100      AddHandler TextCol.TextBox.MouseDown, New MouseEventHandler(AddressOf TextBoxMouseDownHandler)
          AddHandler TextCol.TextBox.DoubleClick, New EventHandler(AddressOf TextBoxDoubleClickHandler)
          ts1.GridColumnStyles.Add(TextCol)
          dataGrid1.TableStyles.Add(ts1)    End Sub
        Friend WithEvents Label1 As System.Windows.Forms.Label
        Private Sub InitializeComponent()
          Me.dataGrid1 = New System.Windows.Forms.DataGrid()
          Me.Label1 = New System.Windows.Forms.Label()
          CType(Me.dataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
          Me.SuspendLayout()
          '
          'dataGrid1
          '
          Me.dataGrid1.CaptionVisible = False
          Me.dataGrid1.DataMember = ""
          Me.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
          Me.dataGrid1.Location = New System.Drawing.Point(12, 8)
          Me.dataGrid1.Name = "dataGrid1"
          Me.dataGrid1.Size = New System.Drawing.Size(368, 128)
          Me.dataGrid1.TabIndex = 0
          '
          'Label1
          '
          Me.Label1.Location = New System.Drawing.Point(10, 149)
          Me.Label1.Name = "Label1"
          Me.Label1.Size = New System.Drawing.Size(370, 23)
          Me.Label1.TabIndex = 1
          Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
          '
          'Form1
          '
          Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
          Me.ClientSize = New System.Drawing.Size(388, 189)
          Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Label1, Me.dataGrid1})
          Me.Name = "Form1"
          Me.Text = "鼠标双击事件的例子"
          CType(Me.dataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
          Me.ResumeLayout(False)    End Sub
        <STAThread()> _
        Public Shared Sub Main()      Application.Run(New Form1())    End Sub
        Private Sub TextBoxDoubleClickHandler(ByVal sender As Object, ByVal e As EventArgs)      MessageBox.Show("TrueDoubleClick")    End Sub
        Private Sub TextBoxMouseDownHandler(ByVal sender As Object, ByVal e As MouseEventArgs)      If (DateTime.Now < gridMouseDownTime.AddMilliseconds(SystemInformation.DoubleClickTime)) Then
            MessageBox.Show("GridDoubleClick:" + CType(sender, TextBox).Text)
          End If
          Label1.Text = "TextBoxMouseDownHandler  "    End Sub
        Private Sub dataGrid1_MouseDown(ByVal sender As System.Object, _
          ByVal e As System.Windows.Forms.MouseEventArgs) Handles dataGrid1.MouseDown      gridMouseDownTime = DateTime.Now
          Label1.Text = "dataGrid1_MouseDown  "    End Sub    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
          Handles Label1.Click
          Label1.Text = ""
        End Sub    Private Sub Form1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
          Handles MyBase.Click
          Label1.Text = ""
        End Sub
      End Class
    End Namespace
      

  8.   

    DataGrid1.MarqueeStyle = dbgHighlightRow       '加亮选中一行或一列