Как остановить ProgressBar?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Juliette
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.12.2009 (Вс) 17:42

Как остановить ProgressBar?

Сообщение Juliette » 13.12.2009 (Вс) 17:50

Задание демонстрирует работу с классами, событиями и прогрессБаром.
Поэтому для начала код класса:
Код: Выделить всё
Public Event myEvent(ByVal Value As Integer, _
                   ByRef Cancel As Boolean)
                   
Public Sub Calculate()
    Dim A As Integer, C As Boolean
    A = 0
    C = False
    Do
        A = A + 1
        DoEvents
        RaiseEvent myEvent(A, C)
    Loop Until C = True Or A >= 30000
End Sub


а теперь код программы:

Код: Выделить всё
Dim WithEvents L As Calc

Private Sub Command1_Click()
Set L = New Calc
L.Calculate
End Sub

Private Sub L_myEvent(ByVal Value As Integer, ByRef Cancel As Boolean)

Label1.Caption = Str(Value)
ProgressBar1.Value = Value
End Sub

Private Sub Command2_Click()
Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!?
End Sub


Первая кнопка: начать вычисления
Втрая кнопка: их закончить
Вопрос указан в коде. Я уже месяц думаю как это сделать! Help!

Juliette
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.12.2009 (Вс) 17:42

Re: Как остановить ProgressBar?

Сообщение Juliette » 13.12.2009 (Вс) 17:53

Во второй кнопочке было много знаков вопроса... Теперь : "Я идиот! Убейте меня кто-нибудь!"
Извините!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как остановить ProgressBar?

Сообщение MIT » 13.12.2009 (Вс) 18:03

Juliette писал(а):Во второй кнопочке было много знаков вопроса... Теперь : "Я идиот! Убейте меня кто-нибудь!" Извините!
:lol: :mrgreen:
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как остановить ProgressBar?

Сообщение Хакер » 13.12.2009 (Вс) 18:34

Juliette, у вас неправильное понимание насчёт того, как всё работает. В данном случае прервать цикл внутри метода класса можно только через флаг.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Juliette
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.12.2009 (Вс) 17:42

Re: Как остановить ProgressBar?

Сообщение Juliette » 13.12.2009 (Вс) 23:45

Отлично, у меня неверные представления как все работает))) !!!
Уважаемый Хакер, помогите мне, пожалуйста, исправить мои представления!
Задание было на форме поместить две кнопочки Старт и Стоп. И было сказано добавить в проект модуль класса Calc:
Код: Выделить всё
Public Event myEvent(ByVal Value As Integer, _
               ByRef Cancel As Boolean)
Public Sub Calculate()
   Dim A As Integer, C As Boolean
   A = 0
   Do
      A = A + 1
      DoEvents
      RaiseEvent myEvent(A, C)
   Loop Until C Or A >= 30000
End Sub


Задание: В модуле формы напишите процедуры для кнопок и процедуру обработки события myEvent.
Сделала как смогла... уж извините!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как остановить ProgressBar?

Сообщение Хакер » 13.12.2009 (Вс) 23:49

Вы понимаете, что автора задания надо бить кочергой?

Например, можно в написать такие "процедуры для кнопок":
Код: Выделить всё
Sub cmdStart_Click()
   MsgBox "Вы нажали кнопку ""Старт"""
End Sub

Sub cmdStop_Click()
    MsgBox "Вы нажали кнопку ""Стоп"""
End Sub

и это никак не противоречит заданию.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Juliette
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.12.2009 (Вс) 17:42

Re: Как остановить ProgressBar?

Сообщение Juliette » 13.12.2009 (Вс) 23:51

тем не менее это не прокатит)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как остановить ProgressBar?

Сообщение Хакер » 13.12.2009 (Вс) 23:53

Почему?

Вы в школе телепатов или программистов? Если второе, то почему вы должны угадывать, что этот "лысый урод" имел в виду?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Juliette
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.12.2009 (Вс) 17:42

Re: Как остановить ProgressBar?

Сообщение Juliette » 13.12.2009 (Вс) 23:55

я не в школе и тогда уж "лысая уродина"

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как остановить ProgressBar?

Сообщение Хакер » 14.12.2009 (Пн) 0:00

Я ни в коем случае не имею конкретно ваш случай, ваше учебное заведение и не даю характеристику вашему преподавателю. А то ещё в суд подадут. Школа, например, в данном случае слово более широкого смысла, как в выражениях "западная школа", "старая школа".

Я вообще, экспрессивно выражаясь, обращая внимание не суть вещей. Глуп тот, кто даёт некорректные задания. Ещё более глуп тот, кто как-то худо бедно пытается их решить.

Моё мнение: если вам дали некорректное задание, шлите его (задание) обратно и требуйте корректности и однозначности. Или, если это больше нравится, решайте задачу любым наиболее простым способом, не выходя за рамки требований. Вот я например привёл такое решение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Juliette
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.12.2009 (Вс) 17:42

Re: Как остановить ProgressBar?

Сообщение Juliette » 14.12.2009 (Пн) 0:04

Ну ладно, спасибо за адекватную помощь!

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Как остановить ProgressBar?

Сообщение arvitaly » 14.12.2009 (Пн) 1:25

Хакер писал(а):Я ни в коем случае не имею конкретно ваш случай, ваше учебное заведение и не даю характеристику вашему преподавателю. А то ещё в суд подадут. Школа, например, в данном случае слово более широкого смысла, как в выражениях "западная школа", "старая школа".

Я вообще, экспрессивно выражаясь, обращая внимание не суть вещей. Глуп тот, кто даёт некорректные задания. Ещё более глуп тот, кто как-то худо бедно пытается их решить.

Моё мнение: если вам дали некорректное задание, шлите его (задание) обратно и требуйте корректности и однозначности. Или, если это больше нравится, решайте задачу любым наиболее простым способом, не выходя за рамки требований. Вот я например привёл такое решение.


А если такое задание дают на работе - увольняться?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как остановить ProgressBar?

Сообщение Хакер » 14.12.2009 (Пн) 2:08

На работу с неадекватным руководителем лучше изначально не устраиваться.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как остановить ProgressBar?

Сообщение alex77755 » 14.12.2009 (Пн) 2:59

Или я что-то не так сделал. Или мой ответ грохнули . Не понятно по какой причине. Пробую повторить

код класса
Код: Выделить всё
Public Event myEvent(ByVal Value As Integer)
Dim A As Integer
Dim C As Boolean
Public Sub Calculate()
    Do
        A = A + 1
        DoEvents
     RaiseEvent myEvent(A)
    Loop Until C = 0 Or A >= 30000
End Sub
Public Sub puuse()
C = 0
End Sub
Public Sub Dalee()
C = 1
Calculate
End Sub
Private Sub Class_Initialize()
C = 1
End Sub

Код формы:
Код: Выделить всё
Dim WithEvents L As Calc
Private Sub Command1_Click() ' пуск
Set L = New Calc
L.Calculate
End Sub
Private Sub Command3_Click() ' продолжить
L.Dalee
End Sub
Private Sub L_myEvent(ByVal Value As Integer)
Label1.Caption = Str(Value)
ProgressBar1.Value = Value
End Sub
Private Sub Command2_Click() ' пауза
L.puuse
End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как остановить ProgressBar?

Сообщение Хакер » 14.12.2009 (Пн) 3:02

Никто не удалял твой ответ (проверено по журналу действий).
Но зачем постить то, что уже сказали?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как остановить ProgressBar?

Сообщение alex77755 » 14.12.2009 (Пн) 7:17

Ещё раз прочитал все сообщения, но так и не нашел, что Juliette получила ответ на свой вопрос

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как остановить ProgressBar?

Сообщение Денис » 14.12.2009 (Пн) 8:56

alex77755 писал(а):Ещё раз прочитал все сообщения, но так и не нашел, что Juliette получила ответ на свой вопрос

Оттож.
Он сказал, что решается флагами. Но код привел только ты. Но тут речь не о флаге вообще, но о способе установки флага.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как остановить ProgressBar?

Сообщение alex77755 » 14.12.2009 (Пн) 13:56

но о способе установки флага

Вот то ж. Я только изучаю VB и ещё не понял, как использовать ByRef при передаче из класса
в задании указано:
Событие класса myEvent имеет два параметра. Первый параметр используется для передачи приложению–клиенту значения переменной. Второй параметр – признак окончания процесса. Если он имеет значение True, то вычисления заканчиваются. Обратите внимание, что параметр описан с использованием ключевого слова ByRef, что дает возможность изменять это значение в приложении–клиенте".

И намекалось, что класс надо использовать, а не модернизировать. Ну вроде разобрался По крайней мере код класса не менял:
класс
Код: Выделить всё
Public Event myEvent(ByVal Value As Integer, _
               ByRef Cancel As Boolean)
Public Sub Calculate()
   Dim A As Integer, C As Boolean
   A = 0
   Do
      A = A + 1
      DoEvents
      RaiseEvent myEvent(A, C)
   Loop Until C Or A >= 30000
End Sub


форма с 2 кнопками:

Код: Выделить всё
Dim WithEvents L As Calc
Dim LC As Boolean
Private Sub Command1_Click()
Set L = New Calc
LC = False
L.Calculate
End Sub

Private Sub L_myEvent(ByVal Value As Integer, ByRef Cancel As Boolean)
Label1.Caption = Str(Value)
ProgressBar1.Value = Value
Cancel = LC
End Sub

Private Sub Command2_Click()
LC = True
End Sub

Juliette
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.12.2009 (Вс) 17:42

Re: Как остановить ProgressBar?

Сообщение Juliette » 14.12.2009 (Пн) 17:28

to alex77755
Спасибо огромное, думаю это все именно так и должно выглядеть! Класс менять не предполагалось)
P.S. Даже спасибо to alex77755 за два ответа!
Thanks! Thanks! Thanks! :D
P.S. Всем участникам топика тоже большое спасибо)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList