Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Массив объектов VB.NET Добавлено: 15.05.09 14:13  

Автор вопроса:  Alex | Web-сайт: google.ru | ICQ: 34332827 
Здравствуйте, помогите, пожалуйста, объясните как сделать массив объектов, в частности TextBox, как я понял с помощью TextBoxArray можно это сделать, но как именно никак не пойму, в vb6 просто копированием получался массив.
ps0: Microsoft Visual Basic 2008
ps1: я только начинаю изучать, так что много чего не знаю и могу не понять)))
Заранее спасибо!

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 15.05.09 15:38
Тех массивов объектов которые были в VB6, в VB .NET нету.
То что ты хочешь сделать делается по-другому. И зависит от того что именно тебе нужно.
Если обрабатывать события разных контролов в одном методе, то через Handles нужно дописать список нужных контролов.
Если генерировать динамически контролы, то самым обычным массивом (обработка событий контролов, которые создаются в рантайме делается очень легко)

Ответить

Номер ответа: 2
Автор ответа:
 Alex



ICQ: 34332827 

Вопросов: 1
Ответов: 4
 Web-сайт: google.ru
 Профиль | | #2
Добавлено: 15.05.09 15:54
начнем с того, что я ниче не понял((
мне это для того, чтобы к примеру на форме есть массив текстбоксов, и их можно было перебрать в цикле...
  1. for i=0 to 10
  2. textbox1(i)=""
  3. next i

так к примеру))

Ответить

Номер ответа: 3
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #3 Добавлено: 15.05.09 16:25
Саня надо было меня спросить :)
  1. ublic Class Form1
  2.     Dim mas(0 To 9) As TextBox
  3.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.         For i = 0 To 9
  5.             mas(i) = New TextBox
  6.             mas(i).Text = "TextBox" & i
  7.             mas(i).Left = 10
  8.             mas(i).Height = 10
  9.             mas(i).Width = 70
  10.             If i > 0 Then
  11.                 mas(i).Top = 25 * i + 10
  12.             Else
  13.                 mas(i).Top = 10
  14.             End If
  15.             mas(i).Visible = True
  16.             Me.Controls.Add(mas(i))
  17.         Next
  18.     End Sub
  19. End Class

Ответить

Номер ответа: 4
Автор ответа:
 Alex



ICQ: 34332827 

Вопросов: 1
Ответов: 4
 Web-сайт: google.ru
 Профиль | | #4
Добавлено: 15.05.09 16:39
немного не то, но спасибо, попробую в этом направлении покопаться))
у мну был похожий код, создание аж двумерного массива, сча может че из них скромсаю))
  1. For iCount = 0 To (A - 1)
  2.                 For I = 0 To (B * 20)
  3.                     ReDim Preserve arrTextBox(iCount)  '(Expand array to receive
  4.                     ' next textbox
  5.                     txtTemp = New TextBox   ' ( Create instance of new textbox)
  6.                     txtTemp.Name = "txtBox" & iCount.ToString  '(Name textboxes with
  7.                     'sequential numbering)
  8.                     txtTemp.Width = 20
  9.                     txtTemp.Location = New Point(I, iCount * 20)
  10.                     Me.Controls.Add(txtTemp)           '(Add new textbox to form
  11.                     arrTextBox(iCount) = txtTemp      '(Place reference to new textbox
  12.                     'in appropriate element of array)
  13.  
  14.                     '(The next line adds the handle of the new textbox to the appropriate event)
  15.  
  16.                     AddHandler txtTemp.TextChanged, AddressOf TextChangedEvent
  17.                     I = I + 20
  18.                 Next
  19.             Next
  20.             Index = iCount


еще раз всем спасибо, если будут еще какие способы создания, прошу написать)

Ответить

Номер ответа: 5
Автор ответа:
 _Serega



Вопросов: 1
Ответов: 43
 Профиль | | #5 Добавлено: 16.05.09 03:09
Есть компонент Grid - в нем много примного текстовых полей - может оно надо?
По теме создания новых контролей или производных экземпляров экземпляров класса есть примеры прямо в MSDN - бортовой помощи васика....
Тема обрабоки событий програмно созданных контролей и позднего связывания группы програмно созданых контролей ваще отдельная тема....

Ответить

Номер ответа: 6
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #6 Добавлено: 16.05.09 11:36
 Alex
немного не то, но спасибо, попробую в этом направлении покопаться))

Саня если давать сразу готовое, то ты саму суть не поймёшь, ты должен сам уже доделать - направление я тебе дал.

Ответить

Номер ответа: 7
Автор ответа:
 Alex



ICQ: 34332827 

Вопросов: 1
Ответов: 4
 Web-сайт: google.ru
 Профиль | | #7
Добавлено: 13.06.09 14:57
UP

с созданием разобрался, тогда надо было просто создать, а сейчас появилась нужда с ними работать, в этом случае правда Labels, но не думаю что разница велика, так вот, как мне например обрабатать клик на объекте из этого массива?
  1. Private Sub Label(1)_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label(1).Click
  2.      
  3. End Sub

ругается на
Label(1)

Ответить

Номер ответа: 8
Автор ответа:
 DesT



ICQ: 376533105 

Вопросов: 1
Ответов: 24
 Профиль | | #8 Добавлено: 14.06.09 01:51
Используй
  1.  
  2.     ...
  3.     AddHandler l(1).Click, AddressOf Label1_Click
  4.     ...
  5.  
  6. Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  7.     'Здесь твой код
  8. End Sub

Ответить

Номер ответа: 9
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #9 Добавлено: 14.06.09 22:54
Саня вот примерчик тебе наглядный.
  1. Public Class Form1
  2.     Dim lbl(2) As Label
  3.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.         For i = 0 To 2
  5.             lbl(i) = New Label
  6.             lbl(i).Size = New Size(100, 20)
  7.             lbl(i).BackColor = Color.Aqua
  8.             lbl(i).Text = "Element " & i + 1
  9.             lbl(i).Top = 30 * (i + 1)
  10.             lbl(i).Left = 10
  11.             lbl(i).Visible = True
  12.             Me.Controls.Add(lbl(i))
  13.         Next
  14.         AddHandler lbl(0).Click, AddressOf lbl_Click
  15.         AddHandler lbl(1).Click, AddressOf lbl_Click
  16.         AddHandler lbl(2).Click, AddressOf lbl_Click
  17.     End Sub
  18.  
  19.     Private Sub lbl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  20.         MsgBox(CType(sender, Label).Text)
  21.     End Sub
  22.    
  23. End Class


Вот только жаль что нельзя отлавливать событие клик для всего массива или я не знаю как реализовать это в ВБ.Нет, в вб6 была очень удобная вещь :).

Ответить

Номер ответа: 10
Автор ответа:
 Alex



ICQ: 34332827 

Вопросов: 1
Ответов: 4
 Web-сайт: google.ru
 Профиль | | #10
Добавлено: 20.06.09 15:30
спасибо

Ответить

Номер ответа: 11
Автор ответа:
 Ирина



Вопросов: 0
Ответов: 2
 Профиль | | #11 Добавлено: 01.11.10 21:37
Помогите создать массив из объектов Label и RadioButton.

У меня для каждого Label (их 7) вот такой код, а в нем семь радиокнопок. Смысл такой. Выбираю радиокнопку, а затем по щелчку на метку в ней появляется текст (буква) из радиокнопки. Идет сбор слова из букв. Получается очень большой код без массивов объектов.

 
  1. Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click
  2.         If RadioButton1.Checked = True Then
  3.             Label3.Text = RadioButton1.Text
  4.             RadioButton1.Enabled = False
  5.         End If
  6.  
  7.         If RadioButton2.Checked = True Then
  8.             Label3.Text = RadioButton2.Text
  9.             RadioButton2.Enabled = False
  10.         End If
  11.         ...
  12.         ...
  13.     End Sub


 в VB.6 было так:

  1. Private Sub LblLetter_Click(Index As Integer)
  2. For k=0 to 7
  3.         If OptLetter.Value= True Then
  4.             LblLetter(Index)Caption =OptLetter(k).Caption
  5.             OptLetter(k).Enabled = False
  6.         End If
  7.  End Sub


Хочется, чтобы с массивами получилось, а ума не хватает. Только учусь еще.

Ответить

Номер ответа: 12
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #12 Добавлено: 02.11.10 10:14
имейте в форме
  1. Private nLabels As New List(Of Label)
для хранения своих лабелов,
  1. Private nRButtons As New List(Of RadioButton)
для хранения своих радиокнопок,
AddHandler для обработчиков событий,
и счастье.

Ответить

Номер ответа: 13
Автор ответа:
 Ирина



Вопросов: 0
Ответов: 2
 Профиль | | #13 Добавлено: 02.11.10 23:18
Я все равно не понимаю как дальше

Ответить

Номер ответа: 14
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #14 Добавлено: 03.11.10 08:04
тогда стоит начинать с азов ;)

Ответить

Номер ответа: 15
Автор ответа:
 FinGerLink



Вопросов: 1
Ответов: 6
 Профиль | | #15 Добавлено: 08.12.10 00:48
а вот смотрите я допустим сделал массив кнопок
  1. Private Sub кнопочкаButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
  2.         For i = 1 To 6
  3.             For j = 1 To 6
  4.                 кнопки(i, j) = New Button()
  5.                 кнопки(i, j).Left = 65 + (j - 1) * 30
  6.                 кнопки(i, j).Top = 220 + (i - 1) * 30
  7.                 кнопки(i, j).Width = 30
  8.                 кнопки(i, j).Height = 30
  9.                 Me.Controls.Add(кнопки(i, j))
  10.                 AddHandler кнопки(i, j).Click, AddressOf фигня_click
  11.             Next j
  12.         Next i
  13.  
  14.     End Sub
  15.     Private Sub фигня_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  16.         Dim but As Button = sender
  17.         but.BackColor = Color.Black

что мне надо сделать что после нажатии допустим одной какой нибудь кнопки я не смог нажать на соседние. помогите чет не могу сообразить =)

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам