Я повторяю проблему. В коде есть несколько ошибок, имя шрифта «Arial», вы не должны корректировать rect.Width, вы забыли вызвать Dispose () для шрифтов, кистей и областей. Но они не объясняют поведение. Что-то не так с областью отсечения, которая препятствует правильному обновлению текста. Я не вижу, где это происходит, состояние объекта Graphics в порядке.
Graphics.DrawString () - очень проблемный метод, вам следует избегать его. Все элементы управления Windows Forms, включая ListBox, используют TextRenderer.DrawText (). Это решает проблему, когда я его использую. Я знаю, что измерение труднее, вы можете обойти это, отображая IP-адрес с фиксированным смещением. Выглядит лучше, они выстроятся в столбец таким образом.
Мерцает, потому что вы используете e.DrawBackground (). Это стирает существующий текст, вы рисуете текст обратно на нем. Я не думаю, что двойная буферизация это исправит, вам нужно нарисовать весь элемент, чтобы не рисовать фон. Сложно, если вы не можете получить точный размер текста крупным шрифтом, обходной путь - сначала нарисовать растровое изображение.