Как добавить анимированный gif на кнопку?

Не подскажете, как добавить анимацию gif на кнопку в c#? Простое добавление gif в ресурсы и настройка изображения кнопки не очень хорошо работали (следующие кадры появляются поверх предыдущих). Проблема, похоже, в том, как С# обрабатывает прозрачность, но я не знаю, как это исправить.

Заранее спасибо.

--- редактировать ---

После игры с gif проблема была с прозрачностью в gif. Следующий кадр был нарисован поверх предыдущего, поэтому элементы, которые я хотел сделать прозрачными в середине анимации, просто не сделали этого должным образом (они все еще имеют цвет предыдущего кадра). Решение состояло в том, чтобы создать белые области на следующем кадре, чтобы закрыть предыдущий. Белый был моим прозрачным цветом, так что после этого все выглядело просто отлично :)

Я надеюсь, что кто-то увидит это полезным. Удачного программирования :)


person kyrisu    schedule 05.05.2009    source источник
comment
Кнопка является кнопкой отмены - анимация на ней должна указывать на прогресс (она просто должна двигаться, чтобы пользователь не подумал, что программа разбилась). Кнопка видна, когда фоновый рабочий работает, и она запускает метод отмены синхронизации.   -  person kyrisu    schedule 05.05.2009
comment
Разве вам не нужна полоса прогресса в бегущем режиме? Я видел приложения, в которых используется вращающийся анимированный gif (или что-то еще), и они почти всегда выглядят любительскими, потому что они не адаптируются должным образом к новым темам ОС. Индикатор выполнения будет.   -  person Greg D    schedule 05.05.2009
comment
Анимация размещена на кнопке и соответствует дизайну приложения. Это действительно просто, поэтому оно должно соответствовать разным темам ОС, но, конечно, если я не смогу решить эту проблему, я обращусь к опции индикатора выполнения :)   -  person kyrisu    schedule 06.05.2009


Ответы (3)


Просто заметка для всех. Gif-анимация будет воспроизводиться автоматически, если она используется для свойства .Image, но НЕ для свойства .BackGroundImage. На всякий случай, если кто-то пытается это сделать таким образом.

person Community    schedule 04.06.2009
comment
И в коде Джона: this.Button4.BackgroundImageLayout не влияет на макет .Image... потому что это совершенно разные свойства... - person ; 05.06.2009

Для того, чтобы сделать это, вам необходимо сделать следующее:

  1. Задайте для свойства BackGroundImageLayout значение Center. По умолчанию для этого свойства установлено значение Плитка.

  2. Задайте для свойства Image кнопки анимированный GIF.

Это будет работать, так как я проверял это, и это сработало для меня.

РЕДАКТИРОВАТЬ: Код конструктора размещен ниже:

 this.Button4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
 this.Button4.Image = (System.Drawing.Image)resources.GetObject("Button4.Image");
 this.Button4.Location = new System.Drawing.Point(220, 329);
 this.Button4.Name = "Button4";
 this.Button4.Size = new System.Drawing.Size(81, 68);
 this.Button4.TabIndex = 4;
 this.Button4.Text = "Button4";
 this.Button4.UseVisualStyleBackColor = true;
person jgallant    schedule 05.05.2009
comment
К сожалению, это не сработало для меня. Возможно дело в формате gif (потому что когда я добавляю ресурс на превью анимация тоже не такая как должна быть, но в браузерах работает нормально) - person kyrisu; 05.05.2009
comment
Странно, что у вас это не сработало. Если вы хотите разместить GIF где-нибудь в Интернете, я могу посмотреть. - person jgallant; 05.05.2009
comment
Нужно нажать на sms_sending3.gif на 2 странице. Если вам нужно, я могу разместить его на английском сайте. - person kyrisu; 05.05.2009
comment
Я попробовал с вашим GIF, и у меня это сработало отлично. Я добавил свой код дизайнера вверху. - person jgallant; 05.05.2009
comment
Мой код выглядит так же, но можете ли вы открыть мою гифку в ie и сказать мне, есть ли разница? То есть эти стрелки (треугольники) в верхней части изображения должны появляться справа налево, а затем исчезать справа налево. На моей кнопке они появляются справа налево, но исчезают все вместе (в одно время). - person kyrisu; 06.05.2009

У меня есть работа.

1 из 2 вещей сработало для меня:

  1. Я отредактировал gif, добавив свойство для каждого кадра, чтобы он отрисовывался.

  2. Я изменил версию VS (я использовал бесплатную профессиональную студенческую версию, теперь я использую версию по подписке MSDN)

Спасибо за вклад, ребята. Это привело меня к выводу, что это может быть что-то не так с самим VS, а не с моим стилем программирования :)

person kyrisu    schedule 10.06.2009