2010-11-05 25 views
0

Je travaille actuellement sur la fonction de sélection de cellule pour un datagridview, je dessine des rectangles autour des cellules pour simuler la sélection, en utilisant les coordonnées et la taille du rectangle. Le problème se pose lorsque je fais défiler vers le bas ou à droite pour sélectionner plus de cellules. Lors de la sélection, les rectangles sont dessinés avec les mêmes dimensions et paramètres, quelles que soient les cellules délimitées par le rectangle.synchroniser le dessin de rectangles et faire défiler dans datagridview

Je voudrais savoir comment synchroniser mes dessins rectangle avec le défilement afin de garder les mêmes cellules sélectionnées/délimitées dans le rectangle.

Toute aide ou direction à cet égard est appréciée.

Merci

Répondre

1

Je ne sais pas quelle technique vous utilisez actuellement, mais il vaut la peine de dire que la peinture directement sur le contrôle DataGridView en manipulant son événement Paint est mal avisé.

Vous devrez découper votre code de peinture dans les limites de cellules et/ou lignes spécifiques et peindre dans les événements CellPainting ou 'RowPostPaint`. Pour dessiner un rectangle autour de plusieurs cellules, vous pouvez soit peindre à l'intérieur des bordures des cellules affectées, soit peindre dans les cellules adjacentes.

La propriété CellBounds de DataGridViewCellPaintingEventArgs vous donne les coordonnées qui sont toujours relatives à la cellule elle-même, ce qui signifie qu'elle s'adaptera automatiquement au défilement dans le DataGridView.

Edit: Un exemple de la façon de gérer l'événement CellPainting pour dessiner une bordure personnalisée autour d'une cellule spécifique:

void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { 
    e.Paint(e.ClipBounds, e.PaintParts); 
    if ((e.RowIndex == myRowIndex) && (e.ColumnIndex == myColumnIndex)) { 
     Pen pen = new Pen(Color.Red, 2f); 
     e.Graphics.DrawRectangle(pen, e.CellBounds); 
    } 
    e.Handled = true; 
} 
+0

Merci Smith, je vais essayer et voir si le défilement est synchronisé. Je vous remercie de votre suggestion et semble la bonne idée pour se débarrasser des problèmes de défilement Merci – Milind

+0

Salut Smith, je voulais savoir comment puis-je changer la couleur d'une bordure spécifique d'une cellule une fois que je connais l'index de la ligne et la colonne de cette cellule. J'apprécierais si vous pouviez me guider. – Milind

+0

Le plus simple est de gérer l'événement 'CellPainting', exemple ajouté à ma réponse. –