1 private void smartTipListBox_DrawItem(object sender, DrawItemEventArgs e)
2 {
3 ListBox eObj = sender as ListBox;
4
5 e.DrawBackground();
6
7 string entireText = ((EntireInfo)eObj.Items[e.Index]).VarName;
8
9 int index = entireText.IndexOf(searchingStr, StringComparison.InvariantCultureIgnoreCase);
10 if (index >= 0)
11 {
12 TextFormatFlags formatFlags = TextFormatFlags.NoPadding | TextFormatFlags.SingleLine;
13 //TextFormatFlags formatFlags = TextFormatFlags.TextBoxControl | TextFormatFlags.WordBreak;
14 int leftAndTopPadding = 5;
15 string headText = entireText.Substring(0, index);
16 string matchedText = entireText.Substring(index, searchingStr.Length);
17 string tailText = entireText.Substring(index + matchedText.Length, entireText.Length - index - matchedText.Length);
18 int headTextPartWidth = TextRenderer.MeasureText(headText, e.Font, new Size(int.MaxValue, int.MaxValue), formatFlags).Width;
19 int highlightedTextWidth = TextRenderer.MeasureText(matchedText, e.Font, new Size(int.MaxValue, int.MaxValue), formatFlags).Width;
20 int yPosition = e.Index * smartTipListBox.ItemHeight + leftAndTopPadding;
21 int leftTextMargin = (int)(1 * e.Font.GetHeight() / 6);
22 int rightTextMargin = (int)(1 * e.Font.GetHeight() / 4);
23 if (index > 0)
24 {
25 TextRenderer.DrawText(e.Graphics, headText, e.Font, new Point(leftAndTopPadding, yPosition), Color.Black, formatFlags);
26 TextRenderer.DrawText(e.Graphics, matchedText, e.Font, new Point(leftAndTopPadding + headTextPartWidth - 2 * leftTextMargin - rightTextMargin, yPosition), Color.Red, formatFlags);
27 TextRenderer.DrawText(e.Graphics, tailText, e.Font, new Point(leftAndTopPadding + headTextPartWidth + highlightedTextWidth - 3 * leftTextMargin - 2 * rightTextMargin, yPosition), Color.Black, formatFlags);
28 }
29 else
30 {
31 TextRenderer.DrawText(e.Graphics, matchedText, e.Font, new Point(leftAndTopPadding + headTextPartWidth, yPosition), Color.Red, formatFlags);
32 TextRenderer.DrawText(e.Graphics, tailText, e.Font, new Point(leftAndTopPadding + headTextPartWidth + highlightedTextWidth - 2 * leftTextMargin - rightTextMargin, yPosition), Color.Black, formatFlags);
33 }
34
35 //Brush blackBrush = Brushes.Black;
36 //Brush redBrush = Brushes.Red;
37 //Rectangle initRectangle = e.Bounds;
38 //e.Graphics.DrawString(entireText.Substring(0, index), e.Font, blackBrush, initRectangle, null);
39 //initRectangle.Offset(Convert.ToInt32(e.Graphics.MeasureString(entireText.Substring(0, index), e.Font).Width), 0);
40 //e.Graphics.DrawString(entireText.Substring(index, searchingStr.Length), e.Font, redBrush, initRectangle, null);
41 //initRectangle.Offset(Convert.ToInt32(e.Graphics.MeasureString(entireText.Substring(index, searchingStr.Length), e.Font).Width), 0);
42 //e.Graphics.DrawString(entireText.Substring(index + searchingStr.Length, entireText.Length - index - searchingStr.Length), e.Font, blackBrush, initRectangle, null);
43 }
44 }