Создание массива контролов

Обсуждение проблем, возникающих при разработке программ для мобильных устройств.
Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Создание массива контролов

Сообщение Lotreck » 10.06.2009 (Ср) 10:30

Как создать массив контролов для мобильной версии?
Следующий код выдает сообщение : "Value of type '1-dimensional array of System.Windows.Forms.Label' cannot be converted to 'System.Windows.Forms.Control'."
Код: Выделить всё
Public Class Form1
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim LblArray(2) As Label
        Dim Lbl As New  System.Windows.Forms.Label
        Dim i As Integer
        For i = 0 To 2
            Lbl = New Label
            Lbl.Name = "Lab" & i + 1
            Lbl.Text = Lbl.Name
            Lbl.Visible = True
            Lbl.Size = New Drawing.Size(200, 20)
            Lbl.Location = New Drawing.Point(10, 70 + 25 * i)
            LblArray(i) = Lbl
        Next
        Me.Controls.Add(LblArray)
End Sub
End Class

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

Re: Создание массива контролов

Сообщение Viper » 10.06.2009 (Ср) 11:31

Добавляй по одному, а не массивом.
Весь мир матрица, а мы в нем потоки байтов!

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Re: Создание массива контролов

Сообщение Lotreck » 10.06.2009 (Ср) 11:39

Как это по одному? Без цикла что ли?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Создание массива контролов

Сообщение iGrok » 10.06.2009 (Ср) 11:50

Lotreck писал(а):Как это по одному? Без цикла что ли?

Вместо LblArray(i) = LblMe.Controls.Add Lbl.
label:
cli
jmp label

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Re: Создание массива контролов

Сообщение Lotreck » 10.06.2009 (Ср) 13:19

Благодарю. Если имелся ввиду такой вариант

Код: Выделить всё
Public Class Form1
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim But As New System.Windows.Forms.Button
        Dim i As Integer
        For i = 0 To 2
            But = New Button
            But.Name = "Button" & i + 1
            But.Text = But.Name
            But.Visible = True
            But.Tag = i
            But.Size = New Drawing.Size(238, 20)
            But.Location = New Drawing.Point(1, 70 + 25 * i)
            AddHandler But.Click, AddressOf But_Click
            Me.Controls.Add(But)
        Next
    End Sub
    Private Sub but_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    End Sub 
    End Class

то, не очень понятно как распознавать контролы если отсутствует индекс, допустим необходимо чтобы при нажатии второй кнопки на ней менялся текст .
Последний раз редактировалось Lotreck 11.06.2009 (Чт) 7:35, всего редактировалось 1 раз.

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

Re: Создание массива контролов

Сообщение Viper » 10.06.2009 (Ср) 14:18

Lotreck писал(а):Благодарю. Если имелся ввиду такой вариант ... то, не очень понятно как распознавать контролы если отсутствует индекс, допустим необходимо чтобы при нажатии второй кнопки на ней менялся текст .
Именно этот вариант и имелся ввиду. Распознаваь контролы можно и нужно при помощи аргумента sender - это ссылка на объект породивший событие.
Весь мир матрица, а мы в нем потоки байтов!

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Re: Создание массива контролов

Сообщение Lotreck » 11.06.2009 (Чт) 7:41

Как обратиться к нужному контролу, подскажите кто в курсе, самому не удается разобраться.

Код: Выделить всё
Private Sub but_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim j As Integer 'номер нажатой кнопки
        Dim btn As Button
        btn = DirectCast(sender, Button)
        j = (btn.Tag)
        If j = 0 Then
            'кнопка J+1 меняет свое название
        End If
  End Sub

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

Re: Создание массива контролов

Сообщение Viper » 11.06.2009 (Чт) 8:51

Так ты к нему уже обратился, в чем затруднение то?
Весь мир матрица, а мы в нем потоки байтов!

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Re: Создание массива контролов

Сообщение Lotreck » 11.06.2009 (Чт) 10:39

Имелось ввиду изменить его свойства, цель была нажав на первую кнопку изменить название второй .

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

Re: Создание массива контролов

Сообщение Viper » 11.06.2009 (Чт) 10:52

Контролы в коллекции контролов индексируются по имени, следовательно, зная индекс (Tag) нажатой кнопки легко можно получить индекс следующей, по индексу получить имя, ну и обратиться к этой кнопке. Как то так:
Код: Выделить всё
Controls("btn" & sender.Tag +1)
З.Ы. Доработать напильником по месту.
Весь мир матрица, а мы в нем потоки байтов!

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Re: Создание массива контролов

Сообщение Lotreck » 11.06.2009 (Чт) 17:06

Похоже что не по имени.

Код: Выделить всё
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim But As New System.Windows.Forms.Button
        Dim i As Integer
        For i = 0 To 2
            But = New Button
            But.Name = "Butn" & i + 1
            But.Text = But.Name
            But.Visible = True
            But.Size = New Drawing.Size(238, 20)
            But.Tag = i
            But.Location = New Drawing.Point(1, 70 + 25 * i)
            AddHandler But.Click, AddressOf But_Click
            Me.Controls.Add(But)
        Next
    End Sub
    Private Sub but_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim j As Integer 'номер нажатой кнопки
        Dim btn As Button
        btn = DirectCast(sender, Button)
        j = (btn.Tag)
        If j = 0 Then
            Controls("Butn2").Text = "AAAA"
        End If

Conversion from string "Butn2" to type 'Integer' is not valid.

В таком виде работает но учитываются все контролы данного типа, в моем случае кнопки, расположенные на форме в том числе и добавленные вручную.

Код: Выделить всё
Private Sub but_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim j As Integer 'номер нажатой кнопки
        Dim btn As Button
        btn = DirectCast(sender, Button)
        j = (btn.Tag)
        If j = 0 Then
            Controls(2).Text = "AAAA"
        End If
    End Sub


Как прописать чтобы реагировали только кнопки созданные в цикле.


Вернуться в Visual Basic для мобильных устройств

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

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

    TopList