Заменить изображение в ImageList - PullRequest
0 голосов
/ 28 сентября 2018

Я столкнулся с проблемой при написании заголовка.

Я использую ListView for File Explorer, и там много файлов изображений.

проблема, которую мне нужно решить, возникла при заменефайл изображения с тем же именем.

Вопрос:

  • Я хочу заменить изображение с определенным ImageKey в ImageList.
  • Для этогоЯ удаляю изображение в ImageList с помощью ImageKey.После этого я попытался добавить Image с этим ImageKey.

Примечание:

  • Я использую 'File Location' в качестве ImageKey
  • Я удаляю ImageKey в ImageList для замены изображения в списке.
  • После того, как я попытался добавить новое изображение в ImageList (с тем же ключом), оно не вставляется.
  • AddImageKey - хорошо работающая функциякоторый я использую везде.
    • возвращает строку для значения 'ImageKey'.
      • , если файл не является изображением, он возвращает свое расширение (например: .exe)
      • , если ключевой целевой объект - каталог, он возвращает
    • il16, il32, il32FullSize is ImageList

    Мой код с ошибкой:

    il16.Images.RemoveByKey( fi.FullName );
    il32.Images.RemoveByKey( fi.FullName );
    il32FullSize.Images.RemoveByKey( fi.FullName );
    
    item.ImageKey = AddImageKey( fi.FullName, false );
    

    Хорошо сработало MyФункция AddImageKey:

    public String AddImageKey( String Location, bool IsDirectory, bool UseDefault = false )
    {
        String Retval = "";
        if ( IsDirectory )
        {
            Retval = "<DIR>";
            if ( !AddedExtensions.Contains( Retval ) )
            {
                Icon img = this.win32.GetIcon( Directory.GetCurrentDirectory().ToString(), true );
                il16.Images.Add( Retval, img );
                img = this.win32.GetIcon( Directory.GetCurrentDirectory().ToString(), false );
                il32.Images.Add( Retval, img );
                img = this.win32.GetIcon( Directory.GetCurrentDirectory().ToString(), false );
                il32FullSize.Images.Add( Retval, img );
                 AddedExtensions.Add( Retval );
            }
        }
        else
        {
            FileInfo fi = new FileInfo( Location );
            try
            {
                if ( UseDefault )
                {
                    throw new Exception("Use Default Icon");
                }
                if ( !AddedImages.Contains( fi.FullName ) )
                {
                    Image img = Image.FromFile( fi.FullName );
                    il16.Images.Add( fi.FullName, img.GetThumbnailImage( 16, 16, null, new IntPtr()) );
                    il32.Images.Add( fi.FullName, img.GetThumbnailImage( 128, 128, null, new IntPtr() ) );
                    il32FullSize.Images.Add( fi.FullName, img.GetThumbnailImage( 128, 128, null, new IntPtr() ) );
                    img.Dispose();
                    AddedImages.Add( fi.FullName );
                }
                Retval = fi.FullName;
            }
            catch
            {
                if ( !AddedExtensions.Contains( fi.Extension ) )
                {
                    Icon img = this.win32.GetIcon( fi.FullName, true );
                    il16.Images.Add( GetExt( fi.FullName ), img );
                    img = this.win32.GetIcon( fi.FullName, false );
                    il32.Images.Add( GetExt( fi.FullName ), img );
                    il32FullSize.Images.Add( GetExt( fi.FullName ), img );
                    AddedExtensions.Add( fi.Extension );
                }
                Retval = fi.Extension;
            }
        }
        return Retval;
    }
    
    ...