이것은 C# 데스크톱 응용 프로그램입니다. 내 ListBox
의 DrawStyle
속성은 OwnerDrawFixed
으로 설정됩니다.ListBox에 대한 DrawItem 무시 - 선택되지 않은 항목은 다시 그려지지 않습니다.
문제 : 다른 글꼴로 텍스트를 그리려면 DrawItem을 무시하고 작동합니다. 그러나 런타임에 양식의 크기를 조절하기 시작하면 선택한 항목이 올바르게 그려 지지만 나머지는 다시 그려지지 않으므로 선택하지 않은 항목에 대해 텍스트가 손상 될 수 있습니다. 또한
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");
, 폼 크기 조정에 깜박이는 제대로 그려진 아이템합니다 (하나를 선택) :
여기 내 코드입니다. 아니 문제 야하지만, 사람이 TNX
기본 (다시 그리기) 문제 주셔서 감사합니다 - 작동합니다. Double Buffering은 깜박 거리는 데 도움이되지 않았습니다. – flamey