J'essaie de remplacer la méthode de peinture de DataGridViewTextBoxCell dans une classe dérivée afin de pouvoir mettre en retrait le texte de premier plan d'une quantité variable de pixels. Je voudrais si la largeur de la colonne ajuste de sorte que sa largeur totale est la longueur de mon texte de cellules plus le retrait de «tampon». Est-ce que quelqu'un sait d'un moyen d'accomplir cela? est répertorié Ma mise en œuvre boiteuse ci-dessous:Substitution de la méthode de peinture DataGridViewTextBoxCell
public class MyTextBoxCell : DataGridViewTextBoxCell{ ....
protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) {
clipBounds.Inflate(100, 0);
DataGridViewPaintParts pp = DataGridViewPaintParts.Background | DataGridViewPaintParts.Border | DataGridViewPaintParts.ContentBackground
| DataGridViewPaintParts.ErrorIcon;
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, pp);
string text = formattedValue as string;
//My lame attempt to indent 20 pixels??
TextRenderer.DrawText(graphics, text, cellStyle.Font, new Point(cellBounds.Location.X + 20, cellBounds.Location.Y), cellStyle.SelectionForeColor ,TextFormatFlags.EndEllipsis);
}
}
Vivek, Merci d'avoir souligné la propriété Padding, je me sens bête d'avoir manqué en premier lieu. Je peux simplifier un peu mon code en utilisant cette technique. – sbeskur
DataGridView Control est le contrôle le plus complexe que j'ai vu. Il est facile d'oublier certaines de ses caractéristiques soignées. – Vivek