Контролируйте / используйте ImageList, используя строку в качестве имени, например, для кнопок и пикбокса и т. Д. c: this.Controls [string] - PullRequest
0 голосов
/ 06 марта 2020

Мне нужна помощь с использованием списков изображений. Я долго искал решение, но никто не задает этот точный вопрос. Итак, я хочу получить доступ к ImageList по имени, используя строку.

Примерно так:

string PicBoxName;
string ImageListName;
int ImageIndex;

private void FunctionName()
{
    this.Controls[PicBoxName].BackgroundImage = this.Controls[ImageListName].Images.[ImageIndex];
}

Но это дает мне ошибку, говоря, что .Images не существует, поэтому ... Я знаю, что делаю это неправильно, и это не так. Контроли, которые мне нужно использовать ... но что мне тогда делать ??

Спасибо заранее.

1 Ответ

0 голосов
/ 07 марта 2020

Возможно, ваша проблема в том, что вы не добавили ни одного изображения в ImageList. Обратите внимание, что при вызове свойства .Images класс ImageList создает экземпляр свойства Images, если оно не было инициализировано. Это означает, что вы можете иметь нулевое свойство Images, и вызов ImageList.Images будет работать очень хорошо.

Замечания

Если коллекция изображений не имеет еще не создано, оно создается при извлечении этого свойства.

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.imagelist.images?view=netframework-4.8#System_Windows_Forms_ImageList_Images)

Так что возможно Свойство images не было инициализировано, но если вы добавили его из конструктора, эти проблемы будут обработаны до того, как оно попадет в ваш код.

Наиболее вероятное решение заключается в том, что вам сначала нужно добавить изображения в свойство Images. :

private void FunctionName()
{
    // From the above link:
    // Set the ImageSize property to a larger size 
    // (the default is 16 x 16).
    this.Controls[ImageListName].ImageSize = new Size(112, 112);
    this.Controls[ImageListName].Images.Add(
        Image.FromFile("path/to/image"));

    // now there's at least one image
    // so we can call index = 0
    this.Controls[PicBoxName].BackgroundImage = this.Controls[ImageListName].Images[0];
}

(отредактировано для ясности)

...