Добавлено: Пн Дек 14, 2009 10:44 am Заголовок сообщения: Работа с FrmScrollGrid acCheck
Добрый день!
Необходимо сделать форму с таблицей (FrmScrollGrid). в Таблице используется столбец acCheck.
1. Что можно указать в поле DataSource для колонки CheckBox'ов?
2. Как правильно обновлять колонку с CheckBox'ами при удалении строки из середины таблицы? (строки смещаются вверх, а checkBox'ы нет)
3. Нажал на ячейку CheckBox - на нее переместился фокус. Теперь если нажимаю на любую нередактируемую колонку в этой же таблице, то опять изменяется эта ячейка, т.к. фокус остался на ней.
Что не есть хорошо - пользователь может прокрутив таблицу случайно нажать на нередактируемое поле и не заметит изменений.
Пробовал в событии OnCellClick перемещать фокус на другой элемент с помощью SetFocus. Не помогло, т.к. фокус все равно остается на CheckBox-e.
Добавлено: Пн Дек 14, 2009 2:35 pm Заголовок сообщения: Re: Работа с FrmScrollGrid acCheck
S_e_r_g писал(а):
1. Что можно указать в поле DataSource для колонки CheckBox'ов?
Любую переменную целого типа.
S_e_r_g писал(а):
2. Как правильно обновлять колонку с CheckBox'ами при удалении строки из середины таблицы? (строки смещаются вверх, а checkBox'ы нет)
Это потому что переменная в DataSource не понимает смену строки. Нужно использовать BindRow для идентификации строки. Потому удобнее работать с параметрами проводки, Map или массивом.
S_e_r_g писал(а):
3. Нажал на ячейку CheckBox - на нее переместился фокус. Теперь если нажимаю на любую нередактируемую колонку в этой же таблице, то опять изменяется эта ячейка, т.к. фокус остался на ней.
Что не есть хорошо - пользователь может прокрутив таблицу случайно нажать на нередактируемое поле и не заметит изменений.
Это есть "фича"
Можно попробовать побороть, добавив, например, фиктивную редактируемую колонку до CheckBox, уменьшив ее ширину до минимума и не рисуя вертикальную полоску сетки справа.
По хорошему - нужно "ремонтировать" поведение элемента.
S_e_r_g писал(а):
Пробовал в событии OnCellClick перемещать фокус на другой элемент с помощью SetFocus. Не помогло, т.к. фокус все равно остается на CheckBox-e.
setFocus должен отработать по идее. А посмотреть отладчиком состояние фокуса элемента, на который он передается ?
Добавлено: Пн Дек 14, 2009 4:43 pm Заголовок сообщения: Re: Работа с FrmScrollGrid acCheck
olimp писал(а):
Это есть "фича"
Можно попробовать побороть, добавив, например, фиктивную редактируемую колонку до CheckBox, уменьшив ее ширину до минимума и не рисуя вертикальную полоску сетки справа.
По хорошему - нужно "ремонтировать" поведение элемента.
...
setFocus должен отработать по идее. А посмотреть отладчиком состояние фокуса элемента, на который он передается ?
Когда устанавливаешь поле DataSource, то перестает работать событие OnCellClick Соответственно фокус не установишь.
Все это дело удалось побороть с помощью добавления редактируемого поля, как писал olimp, и вот такого класса:
Код:
Class CheckBoxValueClass
Private cbArray '
Private Sub Class_Initialize
cbArray = Array()
End Sub
Public Default Property Get Value(Index)
If UBound(cbArray) >= Index Then
Value = cbArray(Index)
Else
Value = False
End If
End Property
Public Property Let Value(Index, val)
If Index > UBound(cbArray) Then
ReDim Preserve cbArray(Index)
End If
cbArray(Index) = val
Grid1.DeferSetPos Index, 8
End Property
Public Sub RemoveRow(Index)
Dim i
For i = Index To UBound(cbArray) - 1
cbArray(i) = cbArray(i + 1)
Next
ReDim Preserve cbArray(UBound(cbArray) - 1)
End Sub
End Class
В DataSource пишем cbClass.Value(Grid1.BindRow).
Может есть какой-нибудь более простой вариант? (например поправить Акцент )
Добавлено: Пн Дек 14, 2009 5:05 pm Заголовок сообщения: Re: Работа с FrmScrollGrid acCheck
S_e_r_g писал(а):
Может есть какой-нибудь более простой вариант? (например поправить Акцент )
Есть и даже три :)
1. Вспомнить, что есть событие OnBound, которые вызывается вместо CellClick, если DataSource указан.
2. Использовать объект Map вместо массива. Тогда силы придется тратить только сдвиг индексов при удалении элемента внутри списка. Будет работать много быстрее, чем redim для массива
3. Починить CheckBox, но
а) нужно посмотреть насколько это сложно
б) если и исправится, то только в 7.4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах