Массив элементов управления

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

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

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Массив элементов управления

Сообщение 3D-fleX » 24.02.2009 (Вт) 23:01

Код: Выделить всё
Private Sub cboOrder()
          For i = 0 to 6
                Select Case ComboBox(i)
                    Case "1"
                        ComboBox(i+1).Enabled = True
                        ComboBox(i+1).Text = ""
                        ComboBox(i+1).Items.Clear()
                        ComboBox(i+1).Items.Add("2")
                        ComboBox(i+1).Items.Add("3")
                        ComboBox(i+1).Items.Add("5")
                 End Select
           Next
    End Sub


На VB 6 была возможность задавать массивы для элементов управления, а как в VB.NET реализовать этот код? :?:

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

Re: Массивом элемента управления

Сообщение MIT » 24.02.2009 (Вт) 23:04

Код: Выделить всё
DIm CB(9) as ComboBox
For i as integer = 0 to 9
CB(i) = new ComboBox
With CB(i)
// // //
End With
Next
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массивом элемента управления

Сообщение 3D-fleX » 24.02.2009 (Вт) 23:12

MIT писал(а):
Код: Выделить всё
DIm CB(9) as ComboBox
For i as integer = 0 to 9
CB(i) = new ComboBox
With CB(i)
// // //
End With
Next


У меня контролы на форме, а тут получается создавать динамически

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

Re: Массив элементов управления

Сообщение MIT » 24.02.2009 (Вт) 23:27

3D-fleX писал(а):У меня контролы на форме, а тут получается создавать динамически
Если для тебя создавать в реалтайме неприемлимо, то можно, например, руками сделать так:

Код: Выделить всё
Dim CB(9) as ComboBox
CB(0) = combo1
CB(1) = combo2
CB(2) = combo3
//...
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 24.02.2009 (Вт) 23:38

MIT писал(а):
Код: Выделить всё
Dim CB(9) as ComboBox
CB(0) = combo1
CB(1) = combo2
CB(2) = combo3
//...


У меня VB.NET 2008, пишет такую ошибку:
Class 'System.Windows.Forms.ComboBox' cannot be indexed because it has no default property.

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

Re: Массив элементов управления

Сообщение MIT » 24.02.2009 (Вт) 23:50

Наверно на строку Select Case ComboBox(i), да? Если да - то объясню: в .NET`е нет стандартных свойств, так что фишка из vb6 (типа Text1 вместо Text1.Text) не прокатит. Юзай ComboBox(i).Text :wink:
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 24.02.2009 (Вт) 23:54

MIT писал(а):Наверно на строку Select Case ComboBox(i), да? Если да - то объясню: в .NET`е нет стандартных свойств, так что фишка из vb6 (типа Text1 вместо Text1.Text) не прокатит. Юзай ComboBox(i).Text

нет, в самом начале при присвоении элемната к CB() массиву.
Юзай ComboBox(i).Text
- А это совсем не катит.

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

Re: Массив элементов управления

Сообщение MIT » 25.02.2009 (Ср) 0:00

3D-fleX писал(а):нет, в самом начале при присвоении элемната к CB() массиву.
Ты что-то не так делаешь. Код
Код: Выделить всё
        Dim cb(4) As ComboBox
        cb(0) = Me.ComboBox1
        cb(1) = Me.ComboBox2
        cb(2) = Me.ComboBox3
        cb(3) = Me.ComboBox4
        cb(4) = Me.ComboBox5

        For i As Integer = 0 To 4
            With cb(i)
                .Items.Add("test")
                .SelectedIndex = 0
            End With
        Next
работает замечатльно (на форме должны лежать эти комбы)
3D-fleX писал(а):- А это совсем не катит.
Почему?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 25.02.2009 (Ср) 0:11

Сейчас вроде работает когда указал размер массиву CB(4).
- А это совсем не катит. - Почему?
Потому что до этого была ошибка:
    'ComboBox' is a type and cannot be used as an expression.

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

Re: Массив элементов управления

Сообщение MIT » 25.02.2009 (Ср) 0:13

3D-fleX писал(а):Потому что до этого была ошибка: 'ComboBox' is a type and cannot be used as an expression.
А, и правда - умная среда, однако :)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 25.02.2009 (Ср) 0:30

Еще один вопрос пожауйста. Как указать индекс текущего элемента управления?

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

Re: Массив элементов управления

Сообщение MIT » 25.02.2009 (Ср) 9:24

В смысле замена ComboBox1.Index?
Можешь в цикле добавить строчку .Tag = i, либо определять по какому-то отличительному признаку.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 25.02.2009 (Ср) 9:56

Мне не хотелось бы конкретный Tag, а текущий(под фокусом) контрол (а то получается Tag, то же самое что имя элемента)

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

Re: Массив элементов управления

Сообщение MIT » 25.02.2009 (Ср) 10:18

3D-fleX писал(а):Мне не хотелось бы конкретный Tag, а текущий(под фокусом) контрол (а то получается Tag, то же самое что имя элемента)
:?
Эээ...

Код: Выделить всё
        Dim cb(4) As ComboBox
        cb(0) = Me.ComboBox1
        cb(1) = Me.ComboBox2
        cb(2) = Me.ComboBox3
        cb(3) = Me.ComboBox4
        cb(4) = Me.ComboBox5

        For i As Integer = 0 To 4
            With cb(i)
                .Items.Add("test")
                .SelectedIndex = 0
                .Tag = i
            End With
        Next

        With cb(Integer.Parse(Me.ComboBox3.Tag))
            For i As Integer = 0 To 9
                .Items.Add("test " & i)
            Next
        End With
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 25.02.2009 (Ср) 10:32

Я решился обойтись без цикла:
Код: Выделить всё
Private Sub cboOrder()
        Dim CB(7) As ComboBox
        CB(0) = Me.ComboBox1
        CB(1) = Me.ComboBox2
       
        Select Case CB(i).Text
            Case "1"
                With CB(i + 1)
                    .Enabled = True
                    .Text = ""
                    .Items.Clear()
                    .Items.Add("2")
                    .Items.Add("3")
                    .Items.Add("5")
                End With
         End Select
End Sub


Вместо i нужен Index..

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

Re: Массив элементов управления

Сообщение MIT » 25.02.2009 (Ср) 11:18

То ли ты не понимаешь меня, то ли я не понимаю твоего замысла.
Код
Код: Выделить всё
        cb(0) = Me.ComboBox1
        cb(1) = Me.ComboBox2
        cb(2) = Me.ComboBox3
        cb(3) = Me.ComboBox4
        cb(4) = Me.ComboBox5

        For i As Integer = 0 To 4
            With cb(i)
                .Items.Add("test")
                .SelectedIndex = 0
                .Tag = i
            End With
        Next
засовываешь в New() или Load() - в инициализацию формы (объекта)
Код: Выделить всё
Dim cb(4) As ComboBox
объявляешь на уровне класса (можно и как Praivate и как Protected - по ситуации смотри)

А код
Код: Выделить всё
        With cb(Integer.Parse(Me.ComboBox3.Tag))
            For i As Integer = 0 To 9
                .Items.Add("test " & i)
            Next
        End With
это пример прямого обращения к комбе.
Т.е. cb(Index) = Combobox, где Tag равен Index`у
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 25.02.2009 (Ср) 16:42

Код: Выделить всё
        With cb(Integer.Parse(Me.ComboBox3.Tag))
            For i As Integer = 0 To 9
                .Items.Add("test " & i)
            Next
        End With

это пример прямого обращения к комбе.
Т.е. cb(Index) = Combobox, где Tag равен Index`у

Ты делаешь дублирование индекса массива.:
Код: Выделить всё
cb(Integer.Parse(Me.ComboBox3.Tag)


Допустим я не знаю, какой элемент мне нужен, а нужно получить индекс контрола который сдлел событие
Код: Выделить всё
_SelectedIndexChanged
. Как тут быть? :|

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

Re: Массив элементов управления

Сообщение MIT » 25.02.2009 (Ср) 16:58

3D-fleX писал(а):Ты делаешь дублирование индекса массива.:
это пример...

3D-fleX писал(а):Допустим я не знаю, какой элемент мне нужен, а нужно получить индекс контрола который сдлел событие
Получить индекс? Легко:
Код: Выделить всё
    Private Sub ComboBox1_SomeEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SomeEvent
        MsgBox("Index is: " & DirectCast(sender, ComboBox).Tag)
    End Sub

А если тебе все же не индекс нужен, а сам контрол, то тут еще легче:
Код: Выделить всё
    Private Sub ComboBox1_SomeEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SomeEvent
        With DirectCast(sender, ComboBox)
                //...
        End With
    End Sub
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 25.02.2009 (Ср) 17:10

Самое оно! Спасибо

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Массив элементов управления

Сообщение 773FF » 26.02.2009 (Чт) 20:43

8 660 результатов для "VB.Net Массив элементов управления" (0,23 секунд) - http://www.google.com/search?client=opera&rls=ru&q=VB.Net+%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2+%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2+%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F&sourceid=opera&ie=utf-8&oe=utf-8. Из них можно найти уже на первой странице несколько вполне приемлемых ответов. :twisted: Простите за вредность, но хочется читать интересные ответы на интересные вопросы.

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

Re: Массив элементов управления

Сообщение MIT » 26.02.2009 (Чт) 20:51

Не читай :mrgreen:
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Массив элементов управления

Сообщение Joo » 26.02.2009 (Чт) 20:56

MIT писал(а):Не читай :mrgreen:

Глупости! Как раз таки с этого нужно начинать поход на форум!
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 27.02.2009 (Пт) 8:59

773FF писал(а):8 660 результатов для "VB.Net Массив элементов управления" (0,23 секунд)

И практический ни в одном не нашел полезной инофрмации. :?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: Массив элементов управления

Сообщение Ramzes » 27.02.2009 (Пт) 13:01

На заметку автору топика! Тема уже обсуждалась у нас на форме. Ты плохо искал.
Тему не закрываю, так, как вроде обсждают чего-то.
Автору устное предупреждение.
Попробуй в следующий раз поискать хотя бы по форуму ;)

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Массив элементов управления

Сообщение 773FF » 27.02.2009 (Пт) 19:46

Честно говоря я погорячился, сам долго копался в И-нете, пока разобрался как создать массив. В VB6 было удобнее это делать. Прошу прошения за неоправданное замечание.

3D-fleX
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 16.02.2009 (Пн) 1:44

Re: Массив элементов управления

Сообщение 3D-fleX » 28.02.2009 (Сб) 17:43

773FF писал(а):Честно говоря я погорячился, сам долго копался в И-нете, пока разобрался как создать массив. В VB6 было удобнее это делать. Прошу прошения за неоправданное замечание.

И вправду, очень замудрённо задумано здесь. Вот я нашел Метод IndexOf класса Control, но вот беда, почему то индексы не всегда присваиваются к элементу. Допустим у меня был элемент GoupBox с индексом 8, как только нарисовал новый элемент индекс GroupBox`а сбросился на 0. Возможно есть еще какой то метод чтоб добраться до элемента (и не только к текущему а к следующему после текущего) :roll:

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

Re: Массив элементов управления

Сообщение MIT » 28.02.2009 (Сб) 18:06

3D-fleX писал(а):Возможно есть еще какой то метод чтоб добраться до элемента
Как вариант можно, конечно, использовать TabStop в качестве индекса, но это, имхо, кривой способ.

3D-fleX писал(а):к следующему после текущего
Код: Выделить всё
    Private Sub ComboBox1_SomeEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SomeEvent
        MsgBox(cb(Integer.Parse(DirectCast(sender, ComboBox).Tag) + 1).Text)
    End Sub
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш


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

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

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

    TopList