2012-11-19 38 views
6

Tôi có hai sự kiện DataGridView. Tôi gặp sự cố, khi tôi nhấp đúp vào một ô, cả hai sự kiện tức là các sự kiện cell clickcell double click đang được gọi. xin vui lòng cung cấp cho tôi với câu trả lời tại sao điều này xảy ra và giải pháp whats.Sự kiện nhấp đúp vào ô trong chế độ xem lưới dữ liệu

Cảm ơn

+1

Tôi không biết cách sử dụng nhưng tôi nghĩ rằng nó có thể được giải quyết bằng cách sử dụng 'hook' và' unhook'. hoặc else 'Timer'. –

+0

Vui lòng tham khảo liên kết này. http://stackoverflow.com/questions/4252735/double-click-to-windows-form-in-c-sharp Hy vọng điều này hepls :) –

Trả lời

1

Rõ ràng không có cách nào để mà chỉ bằng cách thiết lập các thuộc tính trong của DataGridView. Vì vậy, bạn có thể sử dụng Timer để đếm nếu có bất kỳ nhấp chuột đôi, nếu không chỉ làm bất cứ điều gì bạn làm trong xử lý sự kiện một cú nhấn chuột yous, kiểm tra mã:

System.Windows.Forms.Timer t; 
     public Form1() 
     { 
      InitializeComponent(); 

      t = new System.Windows.Forms.Timer(); 
      t.Interval = SystemInformation.DoubleClickTime - 1; 
      t.Tick += new EventHandler(t_Tick); 
     } 

     void t_Tick(object sender, EventArgs e) 
     { 
      t.Stop(); 
      DataGridViewCellEventArgs dgvcea = (DataGridViewCellEventArgs)t.Tag; 
      MessageBox.Show("Single"); 
      //do whatever you do in single click 
     } 

     private void dataGridView1_CellClick_1(object sender, DataGridViewCellEventArgs e) 
     { 
      t.Tag = e; 
      t.Start(); 
     } 

     private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
     { 
      t.Stop(); 
      MessageBox.Show("Double"); 
      //do whatever you do in double click 
     } 
+0

nhờ trả lời của bạn, nhưng tôi muốn ngăn chặn sự kiện nhấp chuột di động được gọi khi nhấp đúp vào ô đã được kích hoạt – AhmedShawky

+0

@ user1835772 OK, nhưng tôi không nghĩ có cách nào để thực hiện điều đó. Tại sao điều này sẽ là một vấn đề? Điều này hoạt động chính xác như bạn muốn. Bạn đã thử chưa? –

+0

có, nhưng tôi cũng tìm thấy số lần gọi ô được gọi – AhmedShawky

1

Vấn đề với Windows của nó. như xa tôi biết họ đã không thêm bất cứ điều gì đặc biệt để xử lý nó.

Bạn có thể xử lý này -

  • a) chỉ làm một cái gì đó đơn nhấp chuột bạn muốn xảy ra trước khi một nhấp chuột kép, như chọn.
  • b) nếu đó không phải là tùy chọn, thì trên sự kiện nhấp, hãy bắt đầu hẹn giờ. Trên đánh dấu hẹn giờ, thực hiện thao tác nhấp chuột đơn. Nếu sự kiện nhấp đúp xảy ra trước, hãy tắt bộ hẹn giờ và thực hiện thao tác nhấp đúp.

Lượng thời gian bạn đặt thời gian cho phải bằng thời gian Nhấp đúp của hệ thống (người dùng có thể chỉ định trong bảng điều khiển). Nó có sẵn từ System.Windows.Forms.SystemInformation.DoubleClickTime.

+0

cảm ơn rất nhiều tôi sẽ cố gắng này – AhmedShawky

1

Bạn có thể sử dụng RowHeaderMouseClick trường hợp lưới

private void dgv_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 

    } 
Các vấn đề liên quan