OnDrawItem - правильный путь. Если вы сделаете это любым другим способом, ваш значок будет удален при следующей перерисовке вкладки (например, если вы переключитесь на другую вкладку или свернете, а затем восстановите окно). В WinForms вы должны рисовать элемент управления только из событий отрисовки этого элемента.
В вашем событии DocumentCompleted вам нужно сохранить значок (например, в поле вашего класса UserControl или Form), а затем вызвать Invalidate
в элементе управления вкладкой. Это приведет к тому, что ваше событие OnDrawItem будет запущено. Ваш OnDrawItem может затем нарисовать значок, если поле было назначено. Примерно так:
private Image _favicon;
private void WebBrowser1_DocumentCompleted(...) {
_favicon = ...get the icon...;
TabControl1.Invalidate();
}
private void TabControl1_OnDrawItem(...) {
if (_favicon != null)
e.Graphcs.DrawImage(_favicon, ...);
}