powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Check (i).Value HELP
4 сообщений из 4, страница 1 из 1
Check (i).Value HELP
    #35445763
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток

Собственно не могу догнать можно ли сделать на VB6 допустим так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
'Событие 
Sub Check_Click(Index As Integer)

  select case Index
    case  1 
      if check( 1 ).value = vbChecked then
        check( 2 ).value = vbChecked
        check( 3 ).value = vbChecked
        check( 4 ).value = vbChecked
        check( 5 ).value = vbChecked
      else 
        check( 2 ).value = vbUnChecked
        check( 3 ).value = vbUnChecked
        check( 4 ).value = vbUnChecked
        check( 5 ).value = vbUnChecked
      end if
    case  2 , 3 , 4 , 5 
'вот а тут то и начинаются непонятки, потому что по логике требуется что-то вроде
      if check( 2 ).value = vbUnChecked Or _
        check( 3 ).value = vbUnChecked Or _
        check( 4 ).value = vbUnChecked Or _
        check( 5 ).value = vbUnChecked Then
      
          check( 1 ).value = vbUnChecked
      end if
  end select
end sub

И начинается маленькое такое зацикливание. Вопрос: есть ли способы как избежать этого зацикливания? А главное чтобы логический функционал сохранился...
Люди добрые, ответьте пожалуйста, если кто сталкивался с такой ситуацией
...
Рейтинг: 0 / 0
Check (i).Value HELP
    #35445808
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, вот в этом коде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if check( 1 ).value = vbChecked then
        check( 2 ).value = vbChecked
        check( 3 ).value = vbChecked
        check( 4 ).value = vbChecked
        check( 5 ).value = vbChecked
      else 
        check( 2 ).value = vbUnChecked
        check( 3 ).value = vbUnChecked
        check( 4 ).value = vbUnChecked
        check( 5 ).value = vbUnChecked
      end if
логики нет, ибо это эквивалентно коду
Код: plaintext
1.
2.
3.
for i= 2  to  5 
        check(i).value = check( 1 ).value
end if
Что же касается ваших непоняток, то введите флаг — blnFlag , поставьте условие в начале процедуры
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub Check_Click(Index As Integer)
   if blnFlag then exit sub
'вот а тут то и начинаются непонятки, потому что по логике требуется что-то вроде
      case  2 , 3 , 4 , 5 

      if check( 2 ).value = vbUnChecked Or _
        check( 3 ).value = vbUnChecked Or _
        check( 4 ).value = vbUnChecked Or _
        check( 5 ).value = vbUnChecked Then
      blnFlag =true
          check( 1 ).value = vbUnChecked
      blnFlag =false
      end if
  end select
end sub



...
Рейтинг: 0 / 0
Check (i).Value HELP
    #35446474
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не совсем то, что мне нужно. Так как если на словах описывать выглядет примерно так:

Что надо было: Есть группа check'ов один из них (напр 1) называется ALL, остальные - как душе угодно. Так вот при нажатии
Код: plaintext
Check( 1 =ALL).Value  =  1  
все лежащие под ним check'и (напр 2,3,4,5 а может быть и 4,7,9,11 - то есть цикл не проходит так как индексы для check'ов могут быть не последовательны)
устанавливаются в 1. А при снятии (
Код: plaintext
Check( 1 =ALL).Value  =  0 
) все лежащие под ним check'и снимаются
+ должна быть предусмотрена ситуация, если снимается один из check'ов группы (но не ALL), то
Код: plaintext
check( 1 =ALL).Value =  0 

Реализуя по отдельности каждую ситуацию - все просто отлично а вот реализуя их вместе происходят непонятки (вернее понятки, срабатывает событие OnClick при установке свойства .Value) вопрос был, как этого избежать?


big-duke ваш ответ описывает ситуацию № 2, а интересна именно компоновка ситуации № 1 + № 2
...
Рейтинг: 0 / 0
Check (i).Value HELP
    #35446733
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
Private ar( 1  To  4 ) As Long  ' список кнопок для чека
Private blnFLag As Boolean
Private Sub Form_Load()
    ar( 1 ) =  2 : ar( 2 ) =  3 : ar( 3 ) =  5 : ar( 4 ) =  6 
End Sub

Private Sub Check1_Click(Index As Integer)
    If blnFLag Then Exit Sub
    ' ставим значение по чек олл
    If Index =  0  Then
        blnFLag = True
        Call SetAll(Check1( 0 ).Value)
        blnFLag = False
        Exit Sub
    End If
    ' если мы в группе, и сняли чек, то снимаем чек и чек олл
    If IsItemInGroup(Index) Then
        If IsAllGroupChecked Then
            blnFLag = True
            Check1( 0 ).Value = vbChecked
            blnFLag = False
            Exit Sub
        End If
        If IsAllGroupUnChecked Then
            blnFLag = True
            Check1( 0 ).Value = vbUnchecked
            blnFLag = False
            Exit Sub
        End If
        blnFLag = True
        Check1( 0 ).Value = CheckBoxConstants.vbGrayed
        blnFLag = False
    End If
    
End Sub
Private Sub SetAll(ByVal p_Value As CheckBoxConstants)
    Dim i As Integer
    For i = LBound(ar) To UBound(ar)
        Check1(ar(i)).Value = p_Value
    Next i
End Sub
Private Function IsAllGroupChecked() As Boolean
    Dim i As Integer
    For i = LBound(ar) To UBound(ar)
        If Check1(ar(i)).Value = vbUnchecked Then
            IsAllGroupChecked = False
            Exit Function
        End If
    Next i
    IsAllGroupChecked = True
End Function
Private Function IsAllGroupUnChecked() As Boolean
    Dim i As Integer
    For i = LBound(ar) To UBound(ar)
        If Check1(ar(i)).Value = vbChecked Then
            IsAllGroupUnChecked = False
            Exit Function
        End If
    Next i
    IsAllGroupUnChecked = True
End Function
Private Function IsItemInGroup(ByVal p_Index As Integer) As Boolean
    Dim i As Integer
    For i = LBound(ar) To UBound(ar)
        If ar(i) = p_Index Then
            IsItemInGroup = True
            Exit Function
        End If
    Next i
    IsItemInGroup = False
End Function
НУ и сам проект
Project1.rar
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Check (i).Value HELP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]