.NET TreeView не будет отображать изображения - PullRequest
5 голосов
/ 24 сентября 2008

Возникла проблема с получением элемента управления 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, и ключ изображения определенно находится в коллекции изображений.

Edit:
Мой гугл-фу слаб. Не могу поверить, что сам не нашел этот ответ.

Ответы [ 4 ]

9 голосов
/ 24 сентября 2008

Полезный бит из гугл-постов выше на самом деле:

"Это известная ошибка в реализации визуальных стилей Windows XP. Некоторые элементы управления, такие как ImageList, не инициализируются должным образом, когда они были созданы до того, как приложение вызывает Application.EnableVisualStyles (). Нормальная реализация Main () в C # Program.cs избегает этого. Спасибо за отправку! "

Таким образом, по сути, гарантируйте, что Application.EnableVisualStyles () вызывается перед инициализацией списка изображений.

2 голосов
/ 24 сентября 2008

Быстрый поиск в Google нашел этот ответ: http://forums.microsoft.com/MSDN/ShowPost.aspx?siteid=1&PostID=965968

Цитата с этой страницы:

Если в функции запуска надстройки создается экземпляр формы, содержащей TreeView, как показано ниже, появляются значки!

public partial class ThisApplication
{
    Form1 frm;

    private void ThisApplication_Startup(object sender, System.EventArgs e)
    {
        frm  = new Form1();
        frm.Show();

    }

НО, если создан экземпляр класса, как показано ниже:

public partial class ThisApplication
{
    Form1 frm = new Form1();


    private void ThisApplication_Startup(object sender, System.EventArgs e)
    {
                    frm.Show();

    }

Тогда они НЕ появляются. Кроме того, если «VisualStyles» (новинка в XP) отключены, значки работают в обоих случаях.

1 голос
/ 24 сентября 2008

В соответствии с [разделом Добавить метод] (http://msdn.microsoft.com/en-us/library/ydx6whxs(VS.80).aspx) в библиотеке MSDN, вам необходимо заполнить оба поля TreeView.ImageList и TreeView.SelectedImageList, поскольку четвертый аргумент ссылается на второй список.

Если эта ошибка возникает при выборе узла, не смотрите дальше.

0 голосов
/ 20 февраля 2009

Решение, опубликованное Yossarian, и популярная "Call Application.DoEvents () между Application.EnableVisualStyles () и Application.Run ()" работали для меня.

После долгих хлопот, скрежета зубов и поиска в Google решение, опубликованное Адди Санто , добилось цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...