2012-11-19 17 views
6

Mam dwa zdarzenia DataGridView. Mam problem, gdy dwukrotnie klikam komórkę, wywoływane są zdarzenia, tj. cell click i cell double click. proszę podać odpowiedź, dlaczego tak się stało i jakie rozwiązanie.Zdarzenie dwukrotne kliknięcie komórki w widoku siatki danych

Dzięki

+1

Nie wiem jak używać, ale myślę, że można to rozwiązać za pomocą 'hook' i' unhook'. lub jeszcze 'Timer'. –

+0

Proszę odnieść się do tego linku. http://stackoverflow.com/questions/4252735/double-click-to-windows-form-in-c-sharp Mam nadzieję, że to hepls :) –

Odpowiedz

1

Podobno nie ma sposobu, aby to właśnie przez ustawienie właściwości w DataGridView. Więc można użyć czasomierza liczyć, jeśli nie było żadnych podwójne kliknięcie, jeśli nie po prostu zrobić cokolwiek w Yous obsługi zdarzeń jednym kliknięciem sprawdzić kod:

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

dzięki za odpowiedź, ale Chcę zatrzymać wywołanie zdarzenia kliknięcia komórki, gdy dwuklik kliknięci w komórkę zostanie odblokowany – AhmedShawky

+0

@ user1835772 OK, ale nie sądzę, że jest sposób na zrobienie tego. Dlaczego to byłby problem? Działa dokładnie tak, jak chcesz. Próbowałeś tego? –

+0

tak, ale znalazłem również kliknięcie komórki wywołane – AhmedShawky

1

Jest to problem z systemem Windows. o ile wiem, nie dodali nic specjalnego, żeby sobie z tym poradzić.

Można sobie z tym poradzić -

  • a) po prostu zrobić coś pojedynczego kliknięcia, że ​​chcesz się zdarzyć przed podwójnym kliknięciem, jak select.
  • b) jeśli nie jest to opcja, w przypadku zdarzenia kliknięcia uruchom licznik czasu. Po zaznaczeniu timera wykonaj jedno kliknięcie. Jeśli zdarzenie dwukrotnego kliknięcia pojawi się jako pierwsze, zabij licznik czasu i wykonaj czynność podwójnego kliknięcia.

Czas potrzebny na ustawienie powinien być równy czasowi podwójnego kliknięcia systemu (który użytkownik może określić w panelu sterowania). Jest dostępny od System.Windows.Forms.SystemInformation.DoubleClickTime.

+0

bardzo dziękuję, spróbuj to – AhmedShawky

1

Można użyć RowHeaderMouseClick wydarzenie siatki

private void dgv_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 

    } 
Powiązane problemy