none
ProgressBar в visual basic 2010 RRS feed

  • Вопрос

  • Есть меняющееся значение, от 0% до 100%. 

    мне нужно наглядно показать это значение в виде полоски с меняющимся цветом, т.е от 0 до 30% идет зеленый цвет, от 30% до 60% другой, и от 60% до 100% красный итд. Получается что то типа эвалайзера...

    Могу я реализовать с помощью ProgressBar? Если да то каким образом. Все мои попытки с ProgressBar-ом не увенчались успехом..

    9 июня 2012 г. 12:43

Ответы

  • С прогессбаром из WinForms все не просто. В частности вот тут сказано, что изменений свойства ForeColor не даст результата если у ОС активированы стили. Плюс я не нашел у него события которое происходит при смене значения Value.

    С прогессбаром из WPF все проще. Просто подписываемся на событие ValueChanget и реагируем:

        Private Sub PBar_ValueChanged(sender As System.Object, e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double))
            If PBar.Value <= 30 Then
                PBar.Foreground = New SolidColorBrush(Colors.Green)
            ElseIf PBar.Value > 30 And PBar.Value <= 60 Then
                PBar.Foreground = New SolidColorBrush(Colors.Blue)
            ElseIf PBar.Value > 60 Then
                PBar.Foreground = New SolidColorBrush(Colors.Red)
            End If
    End Sub

    Можно конечно разместить WPF'овский ProgressBar в проекте WinForms. Для этого вам понадобится изучить ElementHost.

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


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа wshunter 14 июня 2012 г. 6:16
    9 июня 2012 г. 13:25
  • ответ к сожалению не помог...проблему решил picturebox - ом...при различных значения подставил разные картинки)
    • Помечено в качестве ответа Abolmasov Dmitry 15 июня 2012 г. 10:32
    14 июня 2012 г. 5:56

Все ответы

  • С прогессбаром из WinForms все не просто. В частности вот тут сказано, что изменений свойства ForeColor не даст результата если у ОС активированы стили. Плюс я не нашел у него события которое происходит при смене значения Value.

    С прогессбаром из WPF все проще. Просто подписываемся на событие ValueChanget и реагируем:

        Private Sub PBar_ValueChanged(sender As System.Object, e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double))
            If PBar.Value <= 30 Then
                PBar.Foreground = New SolidColorBrush(Colors.Green)
            ElseIf PBar.Value > 30 And PBar.Value <= 60 Then
                PBar.Foreground = New SolidColorBrush(Colors.Blue)
            ElseIf PBar.Value > 60 Then
                PBar.Foreground = New SolidColorBrush(Colors.Red)
            End If
    End Sub

    Можно конечно разместить WPF'овский ProgressBar в проекте WinForms. Для этого вам понадобится изучить ElementHost.

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


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа wshunter 14 июня 2012 г. 6:16
    9 июня 2012 г. 13:25
  • Уважаемый wshunter не оставляйте пожалуйста топик без ответа. Если мой ответ вам помог, то помете его как ответ. Если нет, то пишите, будем помогать дальше.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    13 июня 2012 г. 10:25
  • ответ к сожалению не помог...проблему решил picturebox - ом...при различных значения подставил разные картинки)
    • Помечено в качестве ответа Abolmasov Dmitry 15 июня 2012 г. 10:32
    14 июня 2012 г. 5:56
  • Ну на ваш вопрос я ответил - с помощью progressbar в WinForms ни как.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    14 июня 2012 г. 6:06
  • (( ошибка

    Необработанное исключение типа "System.InvalidOperationException" произошло в System.Drawing.dll
    Дополнительные сведения: В данный момент объект используется другим процессом.

     If mydata.tz <> "" Then
                TextBox7.Text = mydata.tz
                Label11.Text = mydata.tz * 2
                If mydata.tz * 2 >= 0 And mydata.tz * 2 <= 25 Then
                    PictureBox3.Load("C:\ASM12\iconsbg\0-25.jpg")
                ElseIf mydata.tz * 2 > 25 And mydata.tz * 2 <= 50 Then
                    PictureBox3.Load("C:\ASM12\iconsbg\25-50.jpg")
                ElseIf mydata.tz * 2 > 50 And mydata.tz * 2 <= 75 Then
                    PictureBox3.Load("C:\ASM12\iconsbg\50-75.jpg")
                ElseIf mydata.tz * 2 > 75 And mydata.tz * 2 <= 100 Then
                    PictureBox3.Load("C:\ASM12\iconsbg\0-100.jpg")
                Else
                    PictureBox5.BackColor = Color.Black
                End If
            End If

    14 июня 2012 г. 6:32
  • Проверьте, чтобы у вас данная картинка не была открыта в Paint-е или другом графическом редакторе, ну и вообще перезагрузите компьютер. Поможет.
    • Помечено в качестве ответа wshunter 14 июня 2012 г. 6:42
    • Снята пометка об ответе Abolmasov Dmitry 15 июня 2012 г. 10:32
    14 июня 2012 г. 6:40
    Отвечающий
  • аааааааааа, посмотрю СПС
    14 июня 2012 г. 6:41
  • А вообще это тема для нового топика.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    14 июня 2012 г. 6:42
  • Загрузка изображений с диска - довольно медленная операция. Если значение "прогресс-бара" меняется быстро, то следующий вызов загрузки изображения может произойти до того, как завершилась предыдущая. Соответственно, файл ещё занят.

    В данном случае следует предварительно загрузить все картинки в переменные типа Image или Bitmap, а потом только выполнять присвоение PictureBox3.Image = image*, где * - 1, 2, 3, 4.

    14 июня 2012 г. 13:35
  • можете пример этого присвоения показать?
    20 июня 2012 г. 13:17