Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Как отловить событие при смене control-а (textbox) Добавлено: 28.03.07 14:22  

Автор вопроса:  vidxr
В форме более 100 texbox и др., писать каждому событие Change - это смерть. А задача такая, если в textbox введены данные - изменить его свойства.

Заранее низкий поклон!

Ответить

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

Номер ответа: 1
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #1
Добавлено: 28.03.07 14:27
Сделай функцию и пропиши ее каждому change-у

Ответить

Номер ответа: 2
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #2 Добавлено: 28.03.07 14:32
focus_lost и focus_set.

Ответить

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



Вопросов: 2
Ответов: 5
 Профиль | | #3 Добавлено: 28.03.07 14:44
по первому ответу - я же писал, их больше 100, а это 300 (!!!!) строчек кода, т.е. сработает, но видочек тот-еще.
 
По поводу focus_lost и т.д. - УМОЛЯЮ поподробнее!!!

Ответить

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



Вопросов: 120
Ответов: 438
 Профиль | | #4 Добавлено: 28.03.07 15:10
public textbox1_Change(Index as Integer)
 msgbox "Hopla",,"Change
End Sub

а textbox ы делаешь одним именем и каждому ставишь Index от 0 и до стколько тебе там надо
кол-во textbox -1

а если разные условия то

public textbox1_Change(Index as Integer)
 Select Case Index
Case 0
 msgbox "Box0"
Case 1
 msgbox "Box1"
Case 2
 msgbox "Box2"
Case 3
 msgbox "Box3"
End Select

End Sub

Ответить

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



Вопросов: 2
Ответов: 5
 Профиль | | #5 Добавлено: 28.03.07 16:05
Может я и ошибаюсь, но создавать TextBox-ы с одним именем нельзя, у меня не получалось.
А свойство одно - TAG.

Ответить

Номер ответа: 6
Автор ответа:
 bi-lya



Вопросов: 1
Ответов: 125
 Профиль | | #6 Добавлено: 28.03.07 16:40
Недавно была подобная тема... Смотрите http://www.dimit.pochta.ru/wopr.html "Массив элементов CommandBarButton"
Делается через класс, с прописыванием переменной с WithEvents.

Ответить

Номер ответа: 7
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #7
Добавлено: 28.03.07 17:03
____ В VB есть массивы контрлов, а в VBA их нет. Увы.

Ответить

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



Вопросов: 2
Ответов: 5
 Профиль | | #8 Добавлено: 28.03.07 17:29
А например form1.controls - чем не массив

Ответить

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



Вопросов: 120
Ответов: 438
 Профиль | | #9 Добавлено: 28.03.07 19:11
Может я и ошибаюсь, но создавать TextBox-ы с одним именем нельзя, у меня не получалось.
А свойство одно - TAG.

как нет возьми например на форму один текстбокс вытащи и скопируй его в эту же форму.
Бейсик тебя сам спросил в массив их объединить или нет!!! если нет то имя плюс плюс

Ответить

Номер ответа: 10
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #10
Добавлено: 28.03.07 19:48
____ "... А например form1.controls - чем не массив ..." /vidxr/

____ Для этого "массива" не задать общего события.

Ответить

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


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #11 Добавлено: 28.03.07 20:59
хук на WM_SETFOCUS

Ответить

Номер ответа: 12
Автор ответа:
 bi-lya



Вопросов: 1
Ответов: 125
 Профиль | | #12 Добавлено: 29.03.07 08:49
ADSemenov.ru, еще раз повторюсь - ДЕЛАЕТСЯ ЧЕРЕЗ КЛАСС!!!!!
Посмотрите приведенную мной ссылку, я по этому подобию все свои формы переделал, и с 32 кнопками и с кучей комбобоксов.

Ответить

Номер ответа: 13
Автор ответа:
 bi-lya



Вопросов: 1
Ответов: 125
 Профиль | | #13 Добавлено: 29.03.07 11:32
Таки решил выложить это
Создаем класс
В нем пишем:
Public WithEvents ctl As MSForms.TextBox

Private Sub ctl_Change()
Cancel = True
MsgBox ctl.Name
End Sub

Ваяем форму с тремя ТехтБоксами. Пишем

Private Massiv() As New Class1

Private Sub UserForm_Initialize()
Dim Contr As MSForms.Control, i As Long

For Each Contr In Me.Controls
    If Left(Contr.Name, 7) = "TextBox" Then
ReDim Preserve Massiv(0 To i)
        Set Massiv(i).ctl = Contr
        i = i + 1
    End If
Next
End Sub

Запускаем и радуемся
Спасибо Дмитрию

Ответить

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



Вопросов: 2
Ответов: 5
 Профиль | | #14 Добавлено: 29.03.07 12:55
Дмитрий, вы ГЕНИЙ!
И красиво, и работает!

Ответить

Страница: 1 |

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



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