Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Ozzornik
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.09.2008 (Пн) 16:34

Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Ozzornik » 25.11.2008 (Вт) 10:23

Приветствую! Возник такой вопрос: у меня на форме есть 80 штук чекбоксов. Имена у них: С1, С2, С3,... итд. А также есть другого типа чекбоксы с другими именами, которые опрашивать не нужно. Как сделать опрос их состояния посредством цикла, и если состояние чекбокса взведенное, то выполнить некоторую функцию "NNх" где х - тот же номер, что и у чекбокса: Что-то типа такого:
Код: Выделить всё
For i = 1 To 80
if Controls("C" & i).checked = true then
NN(i)
end if
Next i


Пробовал поискать поиском по форуму, но есть ответы для других платформ. В VS2008 ни один из примеров не работает и даже на идею не наводит как сделать такую функцию. Есть чувство, что ответ где-то совсем рядом, но ничего не понимаю. Уже дня три сетку ковыряю в надежде что найдется пример кода для этого решения. Буду очень признателен, если подкинете рабочий примерчик!

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

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Денис » 25.11.2008 (Вт) 10:50

Ozzornik писал(а):Как?

Как вариант:
Код: Выделить всё
    Private Sub CheckBoxes_CheckedChanged( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
    Handles _
        CheckBox1.CheckedChanged, _
        CheckBox2.CheckedChanged, _
        CheckBox3.CheckedChanged

        If sender.Equals(CheckBox1) Then NN(1)
        If sender.Equals(CheckBox2) Then NN(2)
        If sender.Equals(CheckBox3) Then NN(3)

    End Sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Sebas » 25.11.2008 (Вт) 10:56

загнать их в массив руками и перебирать как Тебе надо.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ozzornik
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.09.2008 (Пн) 16:34

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Ozzornik » 25.11.2008 (Вт) 12:40

Так вот пока что через вариант if C1.checked=true then... только и остается делать. но это уж слишком огромный код выходит. Особенно при учете, что их 80 штук, да еще и штук 20 дополнительных, не опрашиваемых. Вот потому и интересно сделать через цикл. В VB6 оно легко делается. В яве тоже. а в VS2008 - вообще не понимаю.
Все что смог сделать и чтоб работало через цикл - это изменять текст у всех чекбоксов одновременно:
Код: Выделить всё
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For i = 1 To 5
            If Controls("CheckBox" & i).Text = "выход" Then
                Controls("CheckBox" & i).Text = "вход"
            Else
                Controls("CheckBox" & i).Text = "выход"
            End If
        Next i

    End Sub

А вот прочитать и заменить значение checked уже не выходит: пишет, что "checked is not a member of system.windows.forms.control"
Как же правильно обратиться к этому свойству?

А через массив - это как?

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Williams » 25.11.2008 (Вт) 12:45

DirectCast (TargetControl, CheckBox)
И вы думаете, что вас оставят в живых после прочтения этого поста?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Viper » 25.11.2008 (Вт) 12:55

Ozzornik писал(а):А через массив - это как?
Дык, вот же.
Весь мир матрица, а мы в нем потоки байтов!

Ozzornik
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.09.2008 (Пн) 16:34

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Ozzornik » 25.11.2008 (Вт) 13:15

Так вот в том то и загвоздка, что если писать так:
Код: Выделить всё
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For i = 1 To 5
            If Controls("CheckBox" & i).checked = true Then
                Controls("CheckBox" & i).checked = false            Else
                Controls("CheckBox" & i)..checked = true
            End If
        Next i

    End Sub


То выкидывает ошибку, что "checked is not a member of system.windows.forms.control"
Так что в этом вопрос и состоит - а как иначе это написать, чтоб работало?

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

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Денис » 25.11.2008 (Вт) 13:40

Ozzornik писал(а):выкидывает ошибку, что "checked is not a member of system.windows.forms.control"
Так что в этом вопрос и состоит - а как иначе это написать, чтоб работало?

Код: Выделить всё
Public Class Form1

    Private i As Integer
    Private C1 As CheckBox

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        For i = 1 To 3

            C1 = Controls("CheckBox" & i)

            If C1.Checked = True Then
                C1.Checked = False
            Else
                C1.Checked = True
            End If

        Next i

    End Sub

End Class


Таким образом, твоя задача решается так:

Код: Выделить всё
Public Class Form1

    Private i As Integer
    Private C1 As CheckBox

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        For i = 1 To 80

            C1 = Controls("CheckBox" & i)

            If C1.Checked Then
                NN(i)
            End If

        Next i

    End Sub

End Class
Последний раз редактировалось Денис 25.11.2008 (Вт) 13:46, всего редактировалось 2 раз(а).
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Williams » 25.11.2008 (Вт) 13:41

Тогда так.


Код: Выделить всё
For Each C In Controls

            If C.GetType.Equals(GetType(CheckBox)) Then

'Здесь производить проверку

            End If

        Next
И вы думаете, что вас оставят в живых после прочтения этого поста?

Ozzornik
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 01.09.2008 (Пн) 16:34

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение Ozzornik » 25.11.2008 (Вт) 14:09

Спасибо! Спасибо большое! :alien: :alien: :alien: Оно заработало именно как надо! И подсчет числа взведенных чекбоксов организовать получилось - это тоже актуально было и вызов функции с номером чекбокса! :drunken: Огромное спасибо всем, кто откликнулся! Уже дня три - четыре бодаюсь с этой на первый взгляд элементарной проблемой. Там впереди еще этих боксов будет штук 100 потом. :? Какой же код бы вышел если бы его по условиям строить! :shock:
Спасибо!

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: Опрос одноименных чекбоксов посредством цикла в VS2008 как?

Сообщение ASD » 26.11.2008 (Ср) 19:39

или как вариант в словарь заносить....
Moderator VBStreets
---------------------------


Вернуться в Visual Basic .NET

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

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

    TopList  
cron