.NET Windows Forms 2.0: Как создать общий список изображений? - PullRequest
0 голосов
/ 02 декабря 2008

Я хочу, чтобы в проекте был один imageList, используемый несколькими формами. То есть несколько элементов управления используют один и тот же список изображений.

Примечание. В идеале несколько проектов в одном решении будут использовать один и тот же список изображений, но я не хочу просить слишком много от Microsoft сразу.

Некоторые элементы управления являются списком, некоторые являются древовидными, некоторые являются пользовательскими элементами управления, некоторые являются элементами управления, которые выполняют пользовательские циклы рисования.

Как я могу указать несколько ListViews и TreeViews на один и тот же компонент списка изображений?

Вот некоторые из проблем:

  • Где я могу разместить компонент списка изображений? Он должен сидеть на какой-то форме
  • Как мне убедить IDE показывать элементы управления imagelist в «SmallImageList», которые в разных формах представлены в виде списка?
  • Если я вместо этого создаю список изображений во время выполнения, как мне проектировать изображения, которые появляются в списке изображений?

Примечание: Это было легко в Delphi. Вы бы добавили компонент ImageList, как обычно, и он просто появился в списке доступных списков изображений в свойстве «SmallImageList» в окне «Свойства».

Примечание: Можно сказать, что этого нельзя сделать в Visual Studio. Если ответ таков, что это невозможно, тогда это будет принятый ответ.

Ответы [ 4 ]

1 голос
/ 02 декабря 2008

У нас есть мультипроектное приложение WinForms, построенное из .NET 2.0.

Один из проектов содержит:

  • все изображения, используемые во всем решении
  • класс ImageManager, который имеет один статический метод, содержащий одну строку кода:

Return CType (My.Resources.ResourceManager.GetObject (name), Image)

Тогда мы просто ссылаемся на изображения (в основном .PNG) по имени.

Например,

button.Image = ImageManager.GetImage ("CancelIcon")

Управлять этим намного проще, чем в .NET 1.1. Теперь все, что вам нужно сделать, это добавить изображение в проект, перетащить изображение на графический дисплей ресурсов (в Project | Properties) и скомпилировать.

Поскольку проекты можно повторно использовать в разных решениях, мы можем использовать одну и ту же библиотеку изображений везде, где нам нужно.

Не уверен, что это действительно отвечает на ваш вопрос, но я надеюсь, что это полезно.

1 голос
/ 02 декабря 2008

Что касается основного вопроса:

.NET Windows Forms 2.0: Как создать общий список изображений?

Вы можете поделиться ImageList с UserControl. Просто добавьте UserControl во все формы, и вы сможете получить доступ к ImageList.

0 голосов
/ 22 сентября 2010

Может быть объявление переменной Shared ImageList и заполнение ее при первом запуске приложения.

    Shared shoImageList As New ImageList
    Public Sub New()
        If shoImageList.Images.Count = 0 Then
            shoImageList = ImageList1 
            'or may be a For Each loop here'
        End If
        myTreeView.ImageList = shoImageList
        ImageList1 = Nothing
    End Sub
0 голосов
/ 02 декабря 2008

Я запустил Visual Studio и подумал: «давайте создадим улучшенный элемент управления ImageList, который наследует из списка изображений, исправлю это и опубликую решение на SO», и был разочарован, элемент управления ImageList запечатан (не наследуется), поэтому я застрял, прежде чем я даже начал.

Но я вспомнил, что где-то кто-то уже делал это, и гугл добился цели после небольшой подстройки ключевых слов.

Я нашел решение для CodeProject, в котором Нил Эндрюс , кажется, сделал именно то, что вам нужно, создать списки ImageLists, которые будут наследоваться и совместно использоваться для нескольких форм и элементов управления с полной поддержкой времени разработки.

http://www.codeproject.com/KB/cpp/SharedImageListsComponent.aspx

Спасибо, Нил!

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