Возникла проблема с получением элемента управления TreeView для отображения изображений узлов. Приведенный ниже код иногда работает, но не отображает изображение в другое время.
private TreeNode AddNodeForCore(TreeNode root, Core c) {
string key = GetImageKey(c);
TreeNode t = root.Nodes.Add(c.Name, c.Name, key, key);
t.Tag = c;
return t;
}
Обратите внимание, что в случае сбоя TreeView не может отображать изображения ни для одного узла. TreeView действительно имеет назначенный ImageList, и ключ изображения определенно находится в коллекции изображений.
Обновлено:
Мой гугл-фу слабый. Не могу поверить, что сам не нашел этого ответа.





Быстрый поиск в Google нашел этот ответ: http://forums.microsoft.com/MSDN/ShowPost.aspx?siteid=1&PostID=965968
Цитировать с этой страницы:
If the Form containing the TreeView is instantiated in the add-in startup function as below, the icons appear!
public partial class ThisApplication
{
Form1 frm;
private void ThisApplication_Startup(object sender, System.EventArgs e)
{
frm = new Form1();
frm.Show();
}
BUT, if instantiated with the class, as below:
public partial class ThisApplication
{
Form1 frm = new Form1();
private void ThisApplication_Startup(object sender, System.EventArgs e)
{
frm.Show();
}
Then they do NOT appear. Furthermore, if "VisualStyles" (new with XP) are disabled, the icons work in both instances.
Фактически, полезная часть сообщений в Google:
«Это известная ошибка в реализации визуальных стилей Windows XP. Некоторые элементы управления, такие как ImageList, не инициализируются должным образом, когда они были созданы до того, как приложение вызывает Application.EnableVisualStyles (). Обычная реализация Main () в C# Program.cs этого избегает. Спасибо за ответ! "
В общем, убедитесь, что Application.EnableVisualStyles () вызывается до инициализации списка изображений.
Согласно [раздел метода добавления] (http://msdn.microsoft.com/en-us/library/ydx6whxs(VS.80).aspx) в библиотеке MSDN, вам необходимо заполнить как TreeView.ImageList, так и TreeView.SelectedImageList, поскольку четвертый аргумент относится ко второму списку.
Если эта ошибка возникает при выборе узла, не смотрите дальше.
Решение, опубликованное Йоссарианом, и популярный «Вызов Application.DoEvents () между Application.EnableVisualStyles () и Application.Run ()» у меня не сработали.
После долгих попыток, скрежета зубами и поиска в Google решение, опубликованное Адди Санто, помогло.