protected override void OnDrawItem(DrawListViewItemEventArgs e) { switch (DrawMode) { case drawMode.Default: base.OnDrawItem(e); break; case drawMode.Stylish: base.OnDrawItem(e); if ((e.State & ListViewItemStates.Selected) != 0) { // Draw the background and focus rectangle for a selected item. e.Graphics.FillRectangle(FillFocused.GetBrush(e.Bounds), e.Bounds); if (SurrondBorder) { e.Graphics.DrawRectangle(CellBorderFocused.GetPen(), new Rectangle(e.Bounds.X + (int)HeaderBorder.GetPen().Width, e.Bounds.Y + (int)HeaderBorder.GetPen().Width, e.Bounds.Width - (2 * (int)HeaderBorder.GetPen().Width), e.Bounds.Height - (2 * (int)HeaderBorder.GetPen().Width))); } e.DrawFocusRectangle(); } else { e.Graphics.FillRectangle(FillUnfocused.GetBrush(e.Bounds), e.Bounds); if (SurrondBorder) { e.Graphics.DrawRectangle(CellBorderUnFocused.GetPen(), new Rectangle(e.Bounds.X + (int)HeaderBorder.GetPen().Width, e.Bounds.Y + (int)HeaderBorder.GetPen().Width, e.Bounds.Width - (2 * (int)HeaderBorder.GetPen().Width), e.Bounds.Height - (2 * (int)HeaderBorder.GetPen().Width))); } } // Draw the item text for views other than the Details view. if (View != View.Details) { e.DrawText(); } break; } }
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) { switch (DrawMode) { case drawMode.Default: base.OnDrawSubItem(e); break; case drawMode.Stylish: base.OnDrawSubItem(e); Graphics g = e.Graphics; g.SmoothingMode = Smoothing; g.TextRenderingHint = TextRendering; TextFormatFlags flags = TextFormatFlags.Left; using (StringFormat sf = new StringFormat()) { // Store the column text alignment, letting it default // to Left if it has not been set to Center or Right. switch (e.Header.TextAlign) { case HorizontalAlignment.Center: sf.Alignment = StringAlignment.Center; flags = TextFormatFlags.HorizontalCenter; break; case HorizontalAlignment.Right: sf.Alignment = StringAlignment.Far; flags = TextFormatFlags.Right; break; } // Draw the text and background for a subitem with a // negative value. double subItemValue; if (e.ColumnIndex > 0 && Double.TryParse( e.SubItem.Text, NumberStyles, NumberFormatInfo.CurrentInfo, out subItemValue) && subItemValue < 0) { // Unless the item is selected, draw the standard // background to make it stand out from the gradient. if ((e.ItemState & ListViewItemStates.Selected) == 0) { e.DrawBackground(); } // Draw the subitem text in red to highlight it. g.DrawString(e.SubItem.Text, Font, new SolidBrush(SubTextColor), e.Bounds, sf); return; } if (ShowCellBorder) { foreach (var items in Items) { e.Graphics.DrawRectangle(CellBorderFocused.GetPen(), new Rectangle(e.Bounds.X + (int)HeaderBorder.GetPen().Width, e.Bounds.Y + (int)HeaderBorder.GetPen().Width, e.Bounds.Width - (2 * (int)HeaderBorder.GetPen().Width), e.Bounds.Height - (2 * (int)HeaderBorder.GetPen().Width))); } } // Draw normal text for a subitem with a nonnegative // or nonnumerical value. e.DrawText(flags); } break; } }