Страница 1 из 2

эмулирование счётной таблицы на userform

Добавлено: 19 июл 2008, 13:32
Aent
Есть пользовательская форма. На ней эмулируется таблица 5x5 текстбоксами.
Текстбоксы субклассирую общим обработчиком. Примерно как в http://forum.developing.ru/showthread.php?t=6620&page=2
В некоторые текстбоксы (далее просто ячейки) я должен помещать рассчитываемое значение при изменении определённых ячеек.
Проблема состоит в том на ккакое событие повесить процедуру пересчёта. На сhange не хотелось бы так как до окончания ввода
в ячейку в ней может оказаться некорректное значение. А события Exit у класса для текстбокса нет :(
Только для отдельных текстбоксов. Cобственно я сейчас и пишу 25 обработчиков для Exit для
каждого текстбокса, вызывающих пересчёт ячеек. Но как то это некрасиво.
Использовать ActivX для грида то же не вариант. Мне нужно что бы макрос работал на чужих
машинах без регистрации дополнительных ActiveX.
Cейчас продумываю идею перехватывать Tab и Enter через KeyDown. Но остаётся проболема
с уходом из текстбокса мышью. Перехватывать ещё MouseDown ...
Ваши идеи ?

Re: эмулирование счётной таблицы на userform

Добавлено: 19 июл 2008, 13:49
VictorM
А вариант с дополнительной кнопкой - "Расчитать" не рассматривается?
Или клик по фрейму в котором, допустим, поместить Ваши текстбоксы

Re: эмулирование счётной таблицы на userform

Добавлено: 19 июл 2008, 16:06
Aent
Нет. Никаких явных дополнительных элементов управления.
Клик по фреймуто же не пройдёт. Интересно решение именно в моей постановке:
Ушли из ячейки - пересчёт.

Re: эмулирование счётной таблицы на userform

Добавлено: 19 июл 2008, 17:40
VictorM
Aent,
Cейчас продумываю идею перехватывать Tab и Enter через KeyDown
ну тогда , наверное, Tab или Enter. Другого вроде ничего нет (Exit уже в работе, а сhange не подходит по условиям задания).

Re: эмулирование счётной таблицы на userform

Добавлено: 20 июл 2008, 06:55
Avsha
предложения -
1)
во-первых, необходимо выделить каким-либо образом те ячейки, в которых значения расчитываются, чтобы они визуально отличались от тех, в которые вводим данные.

2)
по щелчку на рассчитываемые ячейки - должен обязательно происходить расчет, пусть и дублирующий основную реализацию

3) желательно показать (сформировать) состояние двух признаков
- произведен изменение данных после последнего расчета
- произведен расчет после изменения данных
в общем - RS-триггер ;)

Пользователь в процессе работы программы должен понять заложенную логику выполнения расчетов:
- автоматически, после изменения данных
- вручную - необходимо явно что-то нажать.

Поэтому вышеуказанные признаки ему желательно (/необходимо) как-то показать -
комментариями - текстом, цветом значений в Textbox-ах и т.д.

Re: эмулирование счётной таблицы на userform

Добавлено: 20 июл 2008, 12:44
Aent
Нет, господа. Заазчик пожелал что бы пересчёт происходил именно при покидании ячейки ввода любым способом. Автоматически а вовсе не после нажатия на дополнительную кнопку (или клавишу) или клик мышкой. Вопрос мой сводился именно к эмулированию в случаее группы текстбоксов события Exit. Цвет ячеек и так разный. Cвойство .Tag использую для указания влияющих ячеек.

Re: эмулирование счётной таблицы на userform

Добавлено: 20 июл 2008, 13:59
Avsha
Но остается проблема с уходом из текстбокса мышью.
а у меня уход мышью - не происходит пока не щелкните по другому объекту,
и тогда все равно срабатывает _Exit,
Tab и Enter
также вызвают_Exit

Код: Выделить всё

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Label1.Caption = "true1"
End Sub
25 _Exit - чем не вариант? не смотреть же на них каждый день :)

Re: эмулирование счётной таблицы на userform

Добавлено: 20 июл 2008, 14:30
EducatedFool
Aent писал(а): Но остаётся проболема
с уходом из текстбокса мышью. Перехватывать ещё MouseDown ...


Не проще ли, в дополнение к имеющейся обработке события Exit, обработать событие UserForm_MouseMove? Поставить флаг IsCalculated, срабатывающий на событие Change определённых текстбоксов, и при наступлении события MouseMove, в зависимости от значения флага IsCalculated, пересчитывать значения (и снимать этот флаг), или ничего не делать.

Re: эмулирование счётной таблицы на userform

Добавлено: 20 июл 2008, 20:29
Aent
Avsha, так так я и поступил. 25 Exit ...
EducatedFool, пользователь может вообще не трогать мышь.

Re: эмулирование счётной таблицы на userform

Добавлено: 20 июл 2008, 22:18
Teslenko_EA
Здравствуйте Aent.
А как Ваш заказчик относится к самостоятельным приложениям VB.
Один массив контролов(TextBox(25)), одно событие(..._LostFocus(Index As Integer)) и процедура обработки тоже может быть одна.
Чем не вариант ? ;)
Евгений.