ProgressBar Control не влияет, если его стиль ProgressBarStyle.Marquee - PullRequest
2 голосов
/ 19 мая 2011

Я пытаюсь протестировать индикатор выполнения с использованием стиля выделения, но безуспешно

    private void Form1_Load(object sender, EventArgs e)
    {
        Application.EnableVisualStyles();

        this.progressBar1.Style = ProgressBarStyle.Marquee;
        this.progressBar1.MarqueeAnimationSpeed = 100;
        //this.progressBar1.Value = 0;
    }

Обновление: при MSDN

Стиль выделения поддерживается только в WindowsXP Home Edition, Windows XP Professional x64 Edition, платформа Windows Server 2003 Может ли это быть проблемой?

Update2: Кажется, проблема с темой, которую я установил на своем компьютере, а не на XPверсия ... Я удалил тему, и проблема просто исчезла!

Ответы [ 4 ]

4 голосов
/ 20 мая 2011

То, как некоторые ответы читают документацию, совершенно неверно.Фактически, стиль выделения полностью поддерживается на всех версиях Windows XP, включая 32-разрядную версию Home & Professional, а также версию x64 (которая действительно имеет больше общего сWindows Server 2003, чем XP).Причина, по которой вы, без сомнения, знаете, что все эти операционные системы поддерживают элемент управления, заключается в том, что все они включают в себя идентичную версию comctrl32.dll, которая и обеспечивает реализацию элемента управления индикатора выполнения.

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

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

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.progressBar1.Style = ProgressBarStyle.Marquee;
        this.progressBar1.MarqueeAnimationSpeed = 100;
    }
}

Запуск под Windows XP с включенной темой Luna:

Marquee progress bar control running under Windows XP with the Luna Homestyle theme

И работает под Windows XP с включенной темой Classic:

Marquee progress bar control running under Windows XP with the Classic theme

Это все из чистой виртуальной машины с 32-разрядной версией Windows XP Professional SP3.Для доказательства:

Редактировать: Похоже, что если у вас установлена ​​пользовательская тема, стиль выделения может отображаться неправильно.Проверьте настройки на панели управления дисплеем.Правильно работают встроенные темы Luna (Windows XP) и Classic, а также неофициальная тема «Акварель».Дизайнеры тем отвечают за разработку этих элементов и включение их в свои темы.Если вы заметили, что ваша тема не поддерживает этот стиль, обратитесь к источнику за обновлением.

4 голосов
/ 19 мая 2011

Вы должны позвонить EnableVisualStyle перед созданием формы.

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.Run(new Form1());
}

От MSDN :

Чтобы иметь эффект, EnableVisualStyles () долженвызываться перед созданием каких-либо элементов управления в приложении;как правило, EnableVisualStyles () - это первая строка в основной функции

0 голосов
/ 10 марта 2015

Даже если ответ уже был дан, для тех, кто может столкнуться с проблемой, возможно, что индикатор выполнения имеет Maximum, установленный на 0. В этом случае не будет анимации даже с Style и MarqueeAnimationSpeedустановить правильные значения.

0 голосов
/ 19 мая 2011

Скорее всего, ответ найден в этом фрагменте документации:

Windows XP Home Edition, Windows XP Professional x64 Edition, примечание по платформе Windows Server 2003 : MarqueeСтиль поддерживается только на этих платформах.

Я полагаю, вы находитесь на другой платформе.

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