This is a C # desktop application. The DrawStyle DrawStyle my ListBox set to OwnerDrawFixed .
Problem: I override DrawItem to draw text in different fonts and it works. But when I start resizing the form at run time, the selected element is drawn correctly, but the rest of them are not redrawn, which leads to distortion of the text for unselected elements.
Here is my code:
private void listDevices_DrawItem(object sender, DrawItemEventArgs e) { e.DrawBackground(); string textDevice = ((ListBox)sender).Items[e.Index].ToString(); e.Graphics.DrawString(textDevice, new Font("Ariel", 15, FontStyle.Bold), new SolidBrush(Color.Black), e.Bounds, StringFormat.GenericDefault); // Figure out where to draw IP StringFormat copy = new StringFormat( StringFormatFlags.NoWrap | StringFormatFlags.MeasureTrailingSpaces ); copy.SetMeasurableCharacterRanges(new CharacterRange[] {new CharacterRange(0, textDevice.Length)}); Region[] regions = e.Graphics.MeasureCharacterRanges( textDevice, new Font("Ariel", 15, FontStyle.Bold), e.Bounds, copy); int width = (int)(regions[0].GetBounds(e.Graphics).Width); Rectangle rect = e.Bounds; rect.X += width; rect.Width -= width; // draw IP e.Graphics.DrawString(" 255.255.255.255", new Font("Courier New", 10), new SolidBrush(Color.DarkBlue), rect, copy); e.DrawFocusRectangle(); } listDevices.Items.Add("Device001"); listDevices.Items.Add("Device002");
In addition, the element that is drawn correctly (selected) flickers when the shape is resized. No biggie, but if anyone knows why .... tnx
source share