2010-10-17 5 views
0

Есть ли событие doubleclick для datagrid? Я пытаюсь использовать этот код, чтобы открыть форму данных, когда пользователь дважды щелкнет строку.C# WinForm Datagrid событие doubleclick

http://www.codeproject.com/KB/grid/usingdatagrid.aspx

Я пытался добавить его двойным щелчком мыши на контроле, но это дает dataGrid1_Navigate вместо этого.

ответ

0

Что вы получаете, когда вы дважды щелкните элемент управления в режиме разработки, это событие, которое разработчики мышления управления будут наиболее использовать, в этом случае это Navigate.

Но да, этот элемент управления имеет два события двойного щелчка мышью:

public partial class Form1 : Form 
{ 
    DataGrid grid = new DataGrid(); 

    public Form1() 
    { 
     InitializeComponent(); 

     grid.DoubleClick += new EventHandler(grid_DoubleClick); 
     grid.MouseDoubleClick += new MouseEventHandler(grid_MouseDoubleClick);    
     grid.Dock = DockStyle.Fill; 

     this.Controls.Add(grid); 
    } 

    void grid_MouseDoubleClick(object sender, MouseEventArgs e) 
    {    
    } 

    void grid_DoubleClick(object sender, EventArgs e) 
    {    
    } 
} 

Однако оба эти события запуска при двойном щелчке в любом месте на контроле, и они напрямую не дают вам информацию о том, что строка была выбран. Возможно, вы сможете получить строку , дважды щелкнув по ссылке в обработчике grid_MouseDoubleClick, получив ее из элемента управления на основании щелчка точки (e.Location), вот как это работает в элементе управления TreeView. С быстрым взглядом я не видел, имеет ли контроль такой метод. Вместо этого вы можете использовать DataGridView, если у вас нет конкретной причины использовать этот элемент управления.

+0

Вот как получить значение, если кто-то интересно: System.Drawing.Point пт = dataGrid1.PointToClient (Cursor.Position); DataGrid.HitTestInfo info = dataGrid1.HitTest (pt); int row; int col; if (info.Column <0) col = 0; else col = info.Column; if (info.Row <0) row = 0; else row = info.Row; string here = dataGrid1 [row, col] .ToString(); MessageBox.Show (здесь); – steve76

0

Похоже, вам нужен способ, чтобы получить список всех событий для данного контроля, а не найти событие по умолчанию (что VS дает вам когда вы дважды щелкните элемент управления в дизайнере) Существует несколько способов сделать это:

Один из способов Выберите сетку. Затем щелкните значок событий, чтобы включить окно свойств в список событий, а затем дважды щелкните событие, которое вы хотите переписать в кодировке события.

В качестве альтернативы, переключитесь в режим просмотра кода, выберите сетку в выпадающем списке объектов в левом верхнем углу окна кода, затем выберите нужное событие из списка всех событий для этого элемента управления в списке событий (вверху справа от окна кода)

0

Я пробовал код @ steve76, но ему пришлось слегка настроить его для работы в системе Windows Embedded CE 6.0. Вот что сработало для меня.

private void dataGrid1_DoubleClick(object sender, EventArgs e) 
{ 
    Point pt = dataGrid1.PointToClient(Control.MousePosition); 
    DataGrid.HitTestInfo info = dataGrid1.HitTest(pt.X, pt.Y); 
    int row; 
    int col; 
    if (info.Column < 0) 
     col = 0; 
    else 
     col = info.Column; 
    if (info.Row < 0) 
     row = 0; 
    else 
     row = info.Row; 
    object cellData = dataGrid1[row, col]; 
    string cellString = "(null)"; 
    if (cellData != null) 
     cellString = cellData.ToString(); 
    MessageBox.Show(cellString, "Cell Contents"); 
}