Отключите анимацию WinForms ProgressBar

Существует ли possbility для отключения анимации индикатора выполнения?

Мне нужен он для некоторого pocess, который приостанавливается и не работающий в данный момент. Средний пользователь думал бы, что процесс работает, если индикатор выполнения является миганием.

Совет создать собственное управление индикатором выполнения не то, что я ищу.

12
задан Vasyl Boroviak 14 May 2010 в 14:12
поделиться

4 ответа

Вы можете использовать состояние паузы в индикаторе прогресса Vista, как это:

// Assuming a Form1 with 3 ProgressBar controls
private void Form1_Load(object sender, EventArgs e)
{
  SendMessage(progressBar2.Handle,
    0x400 + 16, //WM_USER + PBM_SETSTATE
    0x0003, //PBST_PAUSED
    0);

  SendMessage(progressBar3.Handle,
    0x400 + 16, //WM_USER + PBM_SETSTATE
    0x0002, //PBST_ERROR
    0);
}

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
static extern uint SendMessage(IntPtr hWnd,
  uint Msg,
  uint wParam,
  uint lParam);
21
ответ дан 2 December 2019 в 06:44
поделиться

. Вам нужно установить стиль на этот элемент управления специально для отмены изменений темы. Эта статья дает вам немного информации.

0
ответ дан 2 December 2019 в 06:44
поделиться

Стандартным средством сообщения пользователю о том, что действие приостановлено или не может быть точно измерено, является использование стиля отображения бегущей строки.

progressBar1.Style = ProgressBarStyle.Marquee;

Этот стиль игнорирует свойства Максимальное и Значение и отображает "сегмент" индикатора выполнения, который постоянно перемещается по индикатору выполнения и зацикливается (он не заполняет индикатор выполнения , он перемещает то, что выглядит как часть полосы, полностью через элемент управления и снова в начало.)

2
ответ дан 2 December 2019 в 06:44
поделиться

Вы можете переопределить OnPaint() прогрессбара. На самом деле, вам не нужно переписывать все, вам просто нужно унаследовать прогрессбар и переопределить OnPaint следующим образом:

public class my_progress_bar : ProgressBar {
        public Brush brush;
        public my_progress_bar() {
            this.SetStyle(ControlStyles.UserPaint, true);
            brush = Brushes.ForestGreen;
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            //base.OnPaint(e);
            Rectangle rectangle = e.ClipRectangle;
            rectangle.Width = (int)(rectangle.Width * ((double)Value / Maximum)) - 4;
            ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle);
            rectangle.Height = Height - 4;
            e.Graphics.FillRectangle(brush, 2, 2, rectangle.Width, rectangle.Height);
        }
    }
-1
ответ дан 2 December 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: