2010-10-17 5 views

Répondre

0

Ce que vous obtenez lorsque vous double-cliquez sur un contrôle en mode conception est l'événement le plus utilisé par les concepteurs du contrôle, dans ce cas, il s'agit de Navigate.

Mais oui, ce contrôle a deux événements de double clic:

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) 
    {    
    } 
} 

Cependant, ces deux épreuves courues en double-cliquant n'importe où sur le contrôle et ils ne vous donnent pas directement des informations sur ce que la ligne était choisi. Vous pouvez peut-être récupérer la ligne en double-cliqué dans le gestionnaire grid_MouseDoubleClick en l'obtenant du contrôle en fonction du point sur lequel vous avez cliqué (e.Location), c'est ainsi que cela fonctionne dans le contrôle TreeView par exemple. D'un coup d'œil, je n'ai pas vu si le contrôle avait une telle méthode. Vous pourriez envisager d'utiliser DataGridView à la place, si vous n'avez pas de raison particulière d'utiliser ce contrôle.

+0

Voici comment obtenir la valeur si quelqu'un se demande: System.Drawing.Point pt = dataGrid1.PointToClient (Cursor.Position); DataGrid.HitTestInfo info = dataGrid1.HitTest (pt); int row; int col; if (info.Column <0) col = 0; else col = info.Colonne; si (info.Row <0) ligne = 0; autre ligne = info.Row; chaîne ici = dataGrid1 [ligne, col] .ToString(); MessageBox.Show (ici); – steve76

0

On dirait que vous avez besoin d'un moyen d'obtenir une liste de tous les événements pour un contrôle donné, plutôt que de trouver l'événement par défaut (ce qui est ce que VS vous donne lorsque vous double-cliquez sur un contrôle dans le concepteur) Il existe plusieurs façons de procéder:

One way Sélectionnez la grille. Cliquez ensuite sur l'icône des événements pour transformer la fenêtre des propriétés en une liste d'événements, puis cliquez sur l'événement que vous souhaitez commencer à coder l'événement. Alternativement, passez en mode code, sélectionnez la grille dans la liste déroulante des objets en haut à gauche de la fenêtre de code, puis sélectionnez l'événement que vous voulez dans la liste de tous les événements pour ce contrôle dans la liste des événements (en haut à droite de la fenêtre de code)

0

J'ai essayé le code de @ steve76, mais j'ai dû le modifier légèrement pour fonctionner dans un système Windows Embedded CE 6.0. Voici ce qui a fonctionné pour moi.

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"); 
}