Problem med at tegne
Hejsa,Jeg er ved at overstyre tegningen af subitems i et listview. Jeg vil gerne gøre således at jeg kan vælge farven på en del af strengen i midten. (det er til et søgeprogram, den søger filer igennem og tegner så 3 tekst strenge: 1 - den der kommer indtil den fundne tekst, 2 - selve matchet (den fundne tekst), 3 - det der kommer efter den fundne tekst. Mit problem er at jeg får nogle store mellemrum hver gang jeg skriver noget nyt tekst, det er somom den tegner ekstra pixels, her er min kode:
private void resultListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) {
if (e.ColumnIndex == 1) {
ItemClass itemClass = (ItemClass)e.Item.Tag;
string text = e.SubItem.Text;
string match = itemClass.Match;
int start = text.IndexOf(match);
int end = match.Length;
//SizeF spaceSize = e.Graphics.MeasureString(" ", this.Font);
e.Graphics.DrawString(text.Substring(0, start), e.Item.Font, Brushes.Black, e.Bounds);
SizeF textSize = e.Graphics.MeasureString(text.Substring(0, start), e.Item.Font);
e.Graphics.DrawString(match, e.Item.Font, Brushes.Green, new RectangleF(e.Bounds.X + textSize.Width, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
SizeF matchSize = e.Graphics.MeasureString(match, e.Item.Font);
e.Graphics.DrawString(text.Substring(start + end, text.Length - (start + end)), e.Item.Font, Brushes.Black, new RectangleF((e.Bounds.X + textSize.Width) + matchSize.Width, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
//e.Graphics.DrawString(itemClass.Match, this.Font, Brushes.Black, e.Bounds);
} else {
e.DrawText();
}
}
Koden bevirker at en linie kommer til at se således ud (tillempet):
"Dette er teksten før matchen match her er teksten efter"
Det vil sige at der er forholdsvis mere plads før og efter min kode der skriver mit match. Nogle løsninger?