Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как создавать массивы элементов управления вVb2005 Добавлено: 17.07.06 12:53  

Автор вопроса:  Natasha
Добрый день! Подскажите, пожалуйста, новенькой, как в МИ2005 создавать массивы элементов управления? В VB6 это получалось простым копированием элемента (он сам предлагал создать массив), а в 2005-м ничего не выходит. Какие есть простые способы? Заранее спасибо.

Ответить

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

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



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 17.07.06 13:07
В .NET нет как такового, привычного для вас понятия массив элементов управления. Для этих целей используют AddHandler

Ответить

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



Вопросов: 1
Ответов: 1
 Профиль | | #2 Добавлено: 17.07.06 13:19
Расскажите, пожалуйста поподробнее, как его использовать?

Ответить

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



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #3 Добавлено: 17.07.06 15:14
В соответствии с MSDN.

Ответить

Номер ответа: 4
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #4 Добавлено: 17.07.06 19:43
В .NET есть поддержка массивов элементов управления, но только лишь с целью поддержки VB6. Чтобы несколько элементов управления вызывали одно и тоже событие, надо дополнить список Handles, который находится в описании обработчика события. Например, так:

Private Sub Button1_Click(ByVal Sender As System.Object, ByVal EventArgs As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
   '// ...
End Sub

Либо так, как описал EROS:

Private Sub frmMain_Click(ByVal Sender As System.Object, ByVal EventArgs As System.EventArgs) Handles MyBase.Click
   AddHandler Button1.Click, AddressOf EventHandler
End Sub

Private Sub EventHandler(ByVal Sender As System.Object, ByVal EventArgs As System.EventArgs)
   '//
End Sub

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 17.07.06 20:28
Handles Button1.Click, Button2.Click, Button3.Click
 AddHandler Button1.Click, AddressOf EventHandler

Это, по сути, одно и то же.. разница лишь в синтаксисе, и кому как удобней писать :-)))
Главное - это повесить события от разных контролов на 1 обработчик.. как правило имеено для этого и использовались массивы элементов в 6-ке..

Ответить

Номер ответа: 6
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #6 Добавлено: 17.07.06 21:30
Просто юзая AddHandler, мона добавлять/удалять обработчики динамически.
как правило имеено для этого и использовались массивы элементов в 6-ке
да, но обработчик передавался параметр Index, чтобы определить, какой именно контрол вызвал обработчик. К сожалению, как определить контрол в vb2005, я не знаю...

Ответить

Номер ответа: 7
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #7 Добавлено: 17.07.06 21:37
да и вариант, предложенный в MSDN, мне чего-то не очень нравится...

'// Visual Basic 6.0
Private Sub Text1_Change(Index As Integer)
   Select Case Index
      Case 0: MsgBox("The text in the first TextBox has changed";)
      Case 1: MsgBox("The text in the second TextBox has changed";)
      Case 2: MsgBox("The text in the third TextBox has changed";)
   End Select
End Sub

'// Visual Basic 2005
Private Sub TextBoxes_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
TextBox1.TextChanged, TextBox2.TextChanged, TextBox3.TextChanged
   Select Case DirectCast(sender, TextBox).Name
      Case TextBox1.Name : MsgBox("The text in the first TextBox has changed";)
      Case TextBox2.Name : MsgBox("The text in the second TextBox has changed";)
      Case TextBox3.Name : MsgBox("The text in the third TextBox has changed";)
   End Select
End Sub

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 18.07.06 01:18
К сожалению, как определить контрол в vb2005, я не знаю...

Тут все очень просто.. ща объясню...
вот смотри.. в VB6 через индексы массива ты получал ссылку на контрол, так??? А тут эта ссылка передается в параметре sender. Единственное, что тебе надо сделать,так это привести sender к нужному типу...
По аналогии с твоим примером из MSDN..
Dim MyTextBox as TextBox = CType(sender,TextBox)

В результате этого в MyTextBox будет ссылка на тот контрол, который отправил это событие! (то же самое что и в VB6.. только без индексов)
А что касается идентификации, то тут уже кому как нравится.. кто проверяет Name контрола( как в примере), лично я в таких случаях создаю Enum и значение загоняю в свойство Tag контрола. Это уже не суть важно.. главное, что у тебя на руках ссылка на контрол, а там уже делай с ней что угодно!!!

З.Ы. DirectCast(sender, TextBox).Name - это тоже самое что и CType(sender, TextBox).Name! Сначала приводят к типу, а потом проверяют значение Name...

Ответить

Номер ответа: 9
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #9 Добавлено: 18.07.06 11:52
2 EROS: тьфу, ступил... Я знал, для чего Sender, и как определить контрол, вызвавший событие... Просто, наверное, непривычно ещё проверять не индекс, а имя контрола...

Ответить

Номер ответа: 10
Автор ответа:
 K&M



ICQ: 225442067 

Вопросов: 20
Ответов: 170
 Профиль | | #10 Добавлено: 25.07.06 13:39
Вероятно для идентификации лучше создать унаследованый класс и добавить ему необходимые переменные.

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 26.07.06 02:38
создать унаследованый класс и добавить ему необходимые переменные

имхо.. это лишнее.. лично я обхожусь свойством Tag.. нумерую нужные мне элементы и потом сраниваю с Enum ...

Ответить

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



Вопросов: 0
Ответов: 4
 Профиль | | #12 Добавлено: 22.12.06 16:21
Подскажите, пожалуйста, как програмно создать N-ое кол-во элементов управления?

Ответить

Номер ответа: 13
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #13
Добавлено: 22.12.06 16:40
For i As Int32 = 1 To 10
    Dim Textbox As New TextBox
    TextBox.Visible = True
    TextBox.Size = New Size(100, 20)
    TextBox.Location = New Point(10, 30*i)
    Me.Controls.Add TextBox
Next


Пишу по памяти, мог где-то чуть ошибиться. Но в целом идея такая.

Ответить

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



Вопросов: 0
Ответов: 4
 Профиль | | #14 Добавлено: 22.12.06 16:59
Отлично! Спасибо!

Ответить

Страница: 1 |

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



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