2008-12-30 14 views
2

Je réalise un dessin personnalisé dans des cellules datagridview et j'ai des éléments qui peuvent s'étendre verticalement sur plusieurs cellules. Un élément affiche du texte et le problème est de savoir comment puis-je dessiner uniquement la partie du texte de la cellule? J'ai le rectangle de l'objet et les cellules.Comment dessiner une sous-section de texte à l'aide de graphiques .net

Actuellement, je dessine tous le texte sur chaque peinture cellulaire, c'est-à-dire que je dessine sur des cellules autres que celle à partir de laquelle je suis en train de peindre. Cela m'oblige à effacer le texte précédent (afin qu'il ne soit pas flou et gras) ... donc je dessine la corde deux fois par cellule. Pas très efficace.

//get the actual bounds of this entire item spanning across multiple cells 
RectangleF sRectF = GetItemRectF(startX + leftMargin + 2, widthForItem, cellBounds, calItem); 

//we clear it out first, otherwise the text looks bolded if we keep drawing a black string over and over 
//todo should figure out how to only draw this cells section? cellBounds subsection of sRectF somehow 
graphics.DrawString(calItem.Description, new Font("Tahoma", 8), new SolidBrush(itemBackColor), sRectf); 
graphics.DrawString(calItem.Description, new Font("Tahoma", 8), new SolidBrush(Color.Black), sRectF); 

ce que je pourrais tirer la corde sur quelques graphiques temp puis arracher les bornes cellulaires partie et d'en tirer que sur les graphiques réels? Y a-t-il un meilleur moyen?

Merci

Réponse

Region tempRegion = graphics.Clip; 
graphics.Clip = new Region(cellBounds); 
graphics.DrawString(calItem.Description, new Font("Tahoma", 8), new SolidBrush(Color.Black), sRectF); 
graphics.Clip = tempRegion; 

Répondre

1

Je ne pense pas que je comprends tout à fait l'effet visuel vous avez l'intention d'avoir. Le texte de l'élément est-il censé chevaucher plusieurs cellules ou être tronqué dans une seule cellule? Si elle est censée être attachée à la cellule, vous pouvez définir votre zone de découpage à l'aide de Graphics.Clip pour effectuer un clip dans un rectangle spécifié.

Si le problème est lié au maculage dû à l'effacement de la mémoire tampon, vous pouvez utiliser FillRectangle pour effacer une zone moins chère que le texte de dessin.

+0

Ahh le Clip est ce que je voulais ... merci. – dotjoe

Questions connexes