private void lbSearchVerses_MeasureItem(object sender, MeasureItemEventArgs e) { if (e.Index < 0) { return; } BibleSearchResult si = (BibleSearchResult)lbSearchVerses.Items[e.Index]; e.ItemHeight = (int)e.Graphics.MeasureString(si.ToString(), lbSearchVerses.Font, lbSearchVerses.Width - 15).Height + 6; }
private void lbSearchVerses_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) { return; } // Init BibleSearchResult si = (BibleSearchResult)lbSearchVerses.Items[e.Index]; string txt = si.ToString(); SolidBrush brushNormal = new SolidBrush(Color.FromArgb(223, 223, 223)); SolidBrush brushSelected = new SolidBrush(Color.FromArgb(255, 204, 91)); StringFormat sf = new StringFormat(); sf.SetMeasurableCharacterRanges(SearchHelper.FindCharacterRanges(txt, searchTerms)); int h = (int)e.Graphics.MeasureString(txt, lbSearchVerses.Font, lbSearchVerses.Width - 15).Height; Rectangle r = new Rectangle(e.Bounds.X + 7, e.Bounds.Y + 3, lbSearchVerses.Width - 15, h); // Draw the background if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { e.Graphics.FillRectangle(brushSelected, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 2, e.Bounds.Height - 2); } else { e.Graphics.FillRectangle(brushNormal, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 2, e.Bounds.Height - 2); } // Fill in the highlights foreach (Region rg in e.Graphics.MeasureCharacterRanges(txt, lbSearchVerses.Font, r, sf)) { e.Graphics.FillRegion(new SolidBrush(Color.FromArgb(100, Color.Yellow)), rg); } // Draw text if (si.score > 600) { e.Graphics.DrawString(txt, lbSearchVerses.Font, new SolidBrush(Color.FromArgb(80, 80, 80)), r, sf); } else { e.Graphics.DrawString(txt, lbSearchVerses.Font, Brushes.Black, r, sf); } }