au moment de l'exécution, j'ajoute un Ajout du code suivant obtiendra mon icône d'informations (bitmap) à afficher dans chacune des cellules de colonne mais pas l'en-tête de la colonne : p> En outre, il convient de noter que l'image affiche "parfaitement" dans les cellules, c'est-à-dire qu'elle est correctement adaptée à la cellule. P> Cependant , Je ne trouve pas un moyen d'ajouter la même image à la cellule d'en-tête de colonne. Après une certaine google, j'ai utilisé le code suivant qui a placé l'image dans la cellule d'en-tête mais m'a laissé deux problèmes: p> Voici le code: P> DataGridView code> à un formulaire Windows. La colonne finale est un
datagridViewimagecolumn code>:
DataGridView CODE> pour mettre en surbrillance la ligne sélectionnée La mise en surbrillance à la traîne de l'endroit où ma souris a été placée. Li>
ol>
Private Sub MyDataGridView_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles MyDataGridView.CellPainting
Dim InfoIcon As Image = Image.FromFile("C:\MyPath\InfoIcon.bmp")
If e.RowIndex = -1 AndAlso e.ColumnIndex = MyDataGridView.Columns.Count - 1 Then
e.Paint(e.CellBounds, DataGridViewPaintParts.All And Not DataGridViewPaintParts.ContentForeground)
e.Graphics.DrawImage(InfoIcon, e.CellBounds)
e.Handled = True
End If
End Sub
4 Réponses :
Une manière dont vous pouvez le faire consiste à utiliser l'événement CellspSparting CODE> pour dessiner le
bitmap pour une cellule d'en-tête particulière. Voici le code qui fait cela
En supposant que le bitmap soit dans un
imageur code>.
//this.images is an ImageList with your bitmaps
void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == 1 && e.RowIndex == -1)
{
e.PaintBackground(e.ClipBounds, false);
Point pt = e.CellBounds.Location; // where you want the bitmap in the cell
int offset = (e.CellBounds.Width - this.images.ImageSize.Width) / 2;
pt.X += offset;
pt.Y += 1;
this.images.Draw(e.Graphics, pt, 0);
e.Handled = true;
}
}
Dans le cas où vous ne stockez pas l'image dans un imageur, modifier le 2ème dernier LOC à; e.graphics.drawimage (image, pt); travaille aussi.
Cela fonctionne mais comment puis-je placer l'image par le côté du texte avec un peu de remplissage?
Essayez ce code: Si vous avez lu l'article complet pour faire ce lien Vérifiez ce lien: p> http://www.authorcode.com/add-image-on-DataGridView-Column-header- in-vb-net / p> p>
J'ai besoin d'une chose un peu plus complexe - Ajout d'une image devant le texte dans quelques-en-têtes de colonne en ce qui concerne l'alignement de la colonne. Vous devez implémenter votre propre system.windows.forms.dataGridViewColumnheadercell code >
et remplacer ColonneHeeCell CODE>: P>
protected override Size GetPreferredSize( Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex,Size constraintSize )
{
// Load up original image
Size original = base.GetPreferredSize( graphics, cellStyle, rowIndex, constraintSize );
// Ensure the image is set and that we are working on header
if ((rowIndex != -1) || (Image == null)) {
return original;
}
// -1 is reserved value
if (original.Width < 0) {
return original;
}
return new Size( original.Width + Image.Width + 4, original.Height );
}
Peut-on ajouter un contrôle du panneau juste au-dessus des en-têtes de colonne DataGridView CODE>?
@Khurramali, je n'ai jamais testé / essayé ça ... Je pense que cela devrait être possible ... Si vous arrivez à le tester, laissez-moi savoir si cela a fonctionné.
@Vyktor DataGridviewColumn n'a pas de propriété de propriété de propriétéCell. Pouvez-vous clarifier?
@ user3700562 selon DataGridViewColumn Code> Le coffre-tête code>
est disponible depuis 2,0 i>. Mais il note également que c'est [browsharettribute (false)] code> vous êtes donc pas b> capable de le voir dans designer (mais doit le changer de manière programmatique).
Essayez ceci:
Private Sub DataGridView1_CellPainting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting If e.RowIndex > -1 Then If e.ColumnIndex = -1 Then e.Paint(e.CellBounds, DataGridViewPaintParts.Focus And Not DataGridViewPaintParts.ContentForeground) DataGridView1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single e.Graphics.DrawImage(IconImg, e.CellBounds) e.Handled = True 'DataGridView1.RowHeadersWidth = 100 'DataGridView1.ColumnHeadersHeight = 25 End If End If
Vous devriez expliquer ce que vous faites. J'ai eu de la chance d'avoir essayé votre code depuis E.paint (E.Cellbounds, DataGridViewPaintParts.focus et non DataGridViewPaintPartparts.ContentFore) était exactement ce que je cherchais.