Массив Контролов в VB.Net
Ну просто очень нужно!!! Неужели никто по Vb.Net не специализируется?
А какую процедуру там инициализирует клик по кнопке, например?
А какую процедуру там инициализирует клик по кнопке, например?
Там так же как и в VB6 создается обработчик событий типа cmdButton_Click, но вот индекс только она как параметр не дает. Здеся вообще нету такого понятия как индекс, даже если копи\пастом создавать контролы, то он все равно им дает разные Имена (TextBox1, TextBox2...). В принципе можно создавать это динамически, но проблема с обработчиком событий...ему массивы не нравятся.
Там так же как и в VB6 создается обработчик событий типа cmdButton_Click, но вот индекс только она как параметр не дает. Здеся вообще нету такого понятия как индекс, даже если копи\пастом создавать контролы, то он все равно им дает разные Имена (TextBox1, TextBox2...). В принципе можно создавать это динамически, но проблема с обработчиком событий...ему массивы не нравятся.
Я скинул мессагу человеку, который с .Net работал - думаю, скоро он тебе ответит.
Я скинул мессагу человеку, который с .Net работал - думаю, скоро он тебе ответит.
Спасибо :) Будем ждать
Спасибо :) Будем ждать
вобщем так, все достаточно просто, если ты программил в VC када-нить, логика абсолютно такая же.
объявляем массив наших кнопок:
Friend but(4) As System.Windows.Forms.Button
потом где-нить в коде создаем кнопки:
Me.but(0).Location = New System.Drawing.Point(100, 32) 'установить его положение
Me.but(0).Name = "But0" 'дать имя
Me.but(0).Size = New System.Drawing.Size(64, 32) 'установить размеры
Me.but(0).TabIndex = 1 ' табуляцию
Me.but(0).Text = "But1" ' надпись на кнопке
Me.Controls.Add(Me.but(0)) ' добавить кнопку к существующим контролам
AddHandler but(0).Click, AddressOf but_Click ' задать обработчик нажатия
AddHandler but(0).MouseHover, AddressOf but_Hoover 'задать обработчик при наведении курсора на кнопку
AddHandler but(0).MouseLeave, AddressOf but_Leave ' задать обработчик при покидании курсором кнопки
'Обрабатываем нажатие кнопки
Private Sub but_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Label1.Text = "hello"
End Sub
'обрабатываем наведение курсора
Private Sub but_Hoover(ByVal sender As Object, ByVal e As System.EventArgs)
Dim thisbutton As Button = DirectCast(sender, Button)
thisbutton.BackColor = Drawing.Color.AliceBlue
End Sub
'обрабатываем увод курсора
Private Sub but_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
Dim thisbutton As Button = DirectCast(sender, Button)
thisbutton.BackColor = Drawing.Color.AntiqueWhite
End Sub
вот и все, лично все сделал и протестил в VSVS 2003.NET
работает все просто отлично!
вот и все, лично все сделал и протестил в VSVS 2003.NET
работает все просто отлично!
И в правду работает, но я думаю ты меня не понял :). Идея была в том, чтобы одной процедурой обрабатывать события связанные с любым элементом массива, т.е. чтобы при нажатии на любую кнопку из массива кнопок, вызывалась бы одна и та же процедура обработки, а индекс в массиве кнопки, сгенерировавшей событие, получать как параметр (типа как в ВБ6) ну или указатель на эту кнопку...или любой другой способ определить ее. Главное чтобы не надо было на каждую кнопку писать отдельный обработчик! Конечно можно в цикле определить одну функцию для каждого элемента в массиве, но как тогда определить какой именно элемент сгенерировал его?
U menja vrode eto rabotaet.
Ja konechno ne spezialist, no mogu posovetovat tebe shitrit,kak eto delal ja. Prisvaivaesh kazhdomu kontrolu svojstvo Tag (Naprimer But(0).tag=0, But(1).tag=1, But(2).tag=2 i.t.d.), a potom v prozedure obrabotki pishesh: index = CInt(me.ActiveControl.Tag) - vot tebe i indeks.
U menja vrode eto rabotaet.
Spasibo, Poprobuyu... :)
И в правду работает, но я думаю ты меня не понял :). Идея была в том, чтобы одной процедурой обрабатывать события связанные с любым элементом массива, т.е. чтобы при нажатии на любую кнопку из массива кнопок, вызывалась бы одна и та же процедура обработки, а индекс в массиве кнопки, сгенерировавшей событие, получать как параметр (типа как в ВБ6) ну или указатель на эту кнопку...или любой другой способ определить ее. Главное чтобы не надо было на каждую кнопку писать отдельный обработчик! Конечно можно в цикле определить одну функцию для каждого элемента в массиве, но как тогда определить какой именно элемент сгенерировал его?
упс, сорри, не видел раньше твоего ответа...
саса дело говорит, у тебя же передается sender как объект в функцию. по свойствам сендера и определяй какая кнопка нажата. для всех кнопок устанавливаешь один и тот же обработчик, а потом в самом обработчике по свойствам смотришь от какой именно кнопки идет сообщение.
С массивом кнопок. = )