Bắt sự kiện "double click" ở vùng trống trong vb net

Chào các anh chị em!
Tôi đang làm 1 dự án convert từ VB6 sang VBNet. Trong quá trình convert tôi có vướng 1 bug như thế này, nhờ mn chỉ giáo, hoặc xin tên của sự kiện đó. tôi đang muốn bắt sự kiện khi double click VÀO VÙNG TRỐNG.
Điều tôi muốn là như hình vẽ, double click vào vùng k có rowdata thì dòng data đang được select + focus không còn được select nữa (mất màu xanh)

Trước đó tôi có sử dụng event MouseUp để xử lý trường hợp khi click chuột vào vùng không có data thì select + focus KHÔNG bị mất.
Mong mọi người giúp đỡ.

Bạn dùng control gì, framework gì.
VD dưới đây cho winform.

Private Sub DataGridView1_DoubleClick(sender As Object, e As EventArgs) Handles 
 DataGridView1.DoubleClick
        If DataGridView1.SelectedRows.Count > 0 Then
            Call DataGridView1.ClearSelection()
        End If
End Sub
4 Likes
    Private IsSelectCell As Boolean = True
    // Kiểm tra có select vào cell trước khi xảy ra doubleclick. Nếu không thì bỏ qua.
    // Nếu có thì xóa selection (ô màu xanh) và xóa cờ IsSelected để chuẩn bị lần doubleclick sau.
    Private Sub DataGridView1_DoubleClick(sender As Object, e As EventArgs) Handles DataGridView1.DoubleClick
        If IsSelectCell = False Then
            Exit Sub
        End If
        IsSelectCell = False
        Dim dgv As DataGridView = sender
        dgv.ClearSelection()
    End Sub

    // Đánh dấu đã select vào cell trước khi double click xảy ra. Nếu double click vùng trống sẽ không xảy ra sự kiện này
    Private Sub DataGridView1_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseClick
        IsSelectCell = True
    End Sub
4 Likes

đang cần bắt sự kiện khi double click vào vùng trống ý bác!

Cám ơn bạn, nhưng tôi đang muốn bắt sự kiện khi double click vào vùng trống

cái này cũng chỉ bắt được khi click vào data, còn vùng trống thì k bắt được. huhu

Nó kết hợp của 2 sự kiện DoubleClick và CellMouseClick.
Sự khác biệt giữa dbclick vào data hay vùng trống là click vào data sẽ sinh ra CellMouseClick trước dbclick còn click vào vùng trống thì không.
Tóm lại là phải dùng toàn bộ code trên.

3 Likes

k có sự kiện này :frowning:

Control này là DataGridView hay ListView hay là gì khác ?

3 Likes

ListView bác
20 ký tự

Mình vừa thử listview thì nó tự clear mà ?

3 Likes

vì trước đó em phải thêm sự kiện MouseUp để giữ lại select, focus khi click ở vùng trống.
edit:
Hoạt động khi click vào vùng trống:
Khi chưa có select => row đầu tiên được select.
Khi đã có select => giữ nguyên select.
Có select => click ra khỏi lưới đó => mất select => focus vào lưới select lại cái cũ.
dbclick vào data => có select thì giữ select, chưa select thì select
dbclick vào vùng trống => chưa có thì click 1 chuyển màu xanh, click 2 mất màu xanh

Ở bên này double click vẫn bắt được khi click vào vùng trống.
Bạn thử tạo 1 project nhỏ rồi test đi. DoubleClick không phải CellDoubleClick

3 Likes

thử rùi mà, k được bạn :((

Một cách cùi bắp :smile:

    Private Sub ListView1_MouseDown(sender As Object, e As MouseEventArgs) Handles ListView1.MouseDown
        If e.Clicks = 2 Then
            // double click
        End If
    End Sub
3 Likes

Cách cùi bắp em nghĩ tới đầu tiên nhưng chưa làm được
thanks, iem tìm được cách sửa rồi.
Iem khai báo vậy và thêm 1 cờ flag_bd để biết có phải dbclick hay k để xử lý chỗ mouseUp nữa. Thanks bác nha

2 Likes

Em vừa thử chạy được thì bác đưa

=> Đôi khi chỉ cần nghĩ đơn giản 1 vấn đề, đơn giản vẫn hiệu quả :smiley:
Em thêm 1 cờ flg_dbClick khi e.clicks = 2 thì bật cờ flg_dbClick = true. Ở sự kiện MouseUp thì check nếu cờ flg_dbClick = false thì mới thực hiện.
Nên việc dbClick được trả về default

^^ thanks mọi người đã giúp

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?