Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VSFlexGrid: программные переходы по ячейкам. / 4 сообщений из 4, страница 1 из 1
09.08.2007, 20:45
    #34718396
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VSFlexGrid: программные переходы по ячейкам.
Если есть люди которым не жалко своего времени спроектировать алгоритм, пожалуйста отзавитесь, люди добрые, или совет какой дайте, а то знаний маловато.
Задолбался уже, пишу программу с контролом VSFlexGrid, мне нужно при корректировке индексного поля проверить на совпадение всю колонку, если совпадение есть то значение поля должно вернуться в исходное и включиться режим редактирования поля (EditCell()). Если, вписав не правильное значение, пользователь ушел с ячейки то курсор должен вернуться обратно для ввода правильного значения. Я уже задолбался с реализацией возврата на эту ячейку - не всегда получается программно вернуть фокус на нее (в чем и собственно проблема). Метод Select, которым я устанавливаю положение курсора, не срабатывает при обнаружении повторения в событии AfterEdit, срабатывает только в событии MouseDown. Поэтому курсор вернется в том случае если пользователь ушел этого поля кликом мыши, а вот с другими вариантами(клавиатура, пореря курсора) не получается никак реализовать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Private Sub VSFlexGrid1_AfterEdit(ByVal Row As Long, ByVal Col As Long)

    If Not VSFlexGrid1.Text = strBuffer1 Then ' Если содержимое ячейки было изменено
        If VSFlexGrid1.Col =  1  Then ' если это индексное поле
            If IndexVerify(VSFlexGrid1.Text) Then ' Проверка нового значения на повторение
                ' Занесение обновления в базу
                RSet1.MoveFirst
                RSet1.Move VSFlexGrid1.Row -  1 
    
                RSet1.Update VSFlexGrid1.Col -  1 , VSFlexGrid1.Text
            Else
                MsgBox "Такой номер уже существует, введите другой!", vbCritical, "Ошибка"
                VSFlexGrid1.TextMatrix(nCell1( 0 ),  1 ) = strBuffer1 ' Возврат предидущего значения
                bool1 = True ' не обращайте внимания
                
                VSFlexGrid1.Select nCell1( 0 ),  1    ' возврат на эту ячейку, который почему то здесь не срабатывет
                VSFlexGrid1.EditCell  ' редактирование
                bool2 = False ' не обращайте внимания
            End If
            '==============================================
        Else
            ' Обновление если это не индесное поле
            RSet1.MoveFirst
            RSet1.Move VSFlexGrid1.Row -  1 
            Beep
            RSet1.Update VSFlexGrid1.Col -  1 , VSFlexGrid1.Text
        End If
    End If
    
End Sub
' В этом событии не срабатывает функция VSFlexGrid1.Select для перехода на эту же ячейку (возврат)
'Пришлось "возвращаться" при других событиях, вот наример MouseDown, для чего и нужен bool1

Private Sub VSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    If bool1 = True Then VSFlexGrid1.Select nCell1( 0 ), nCell1( 1 )
    bool1 = False
End Sub
'Но вот проблема, Select работает только в этой функции, а при нажадии на стрелку на клавиатуре
'курсор уходит с позиции и возвращаться не хочет и в этот момент безотказно срабатывает StartEdit
'
' Функция проверки на отсутсвие индекса с тким же значением
' принимает проверяемое значение
Function IndexVerify(strSource As String) As Boolean
    Set Rset2 = New ADODB.Recordset
    ' Выборка совпавшихся значений (повторения)
    Rset2.Open "SELECT НОМЕР FROM СПР_ФАМИЛИЙ WHERE НОМЕР=" & strSource _
    , MainConnection, adOpenForwardOnly, adLockPessimistic
    
    IndexVerify = Rset2.EOF And Rset2.BOF ' true если результат выборки пуст (нет совпадений)
    Rset2.Close
    Set Rset2 = Nothing
End Function
...
Рейтинг: 0 / 0
10.08.2007, 09:23
    #34718845
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VSFlexGrid: программные переходы по ячейкам.
попробуй использовать фокус на котрол и метод ShowCell

Код: plaintext
1.
2.
3.
VSFlexGrid1.SetFocus
VSFlexGrid1.Select nCell1( 0 ),  1 
VSFlexGrid1.ShowCell nCell1( 0 ),  1 
VSFlexGrid1.EditCell
...
Рейтинг: 0 / 0
10.08.2007, 09:28
    #34718866
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VSFlexGrid: программные переходы по ячейкам.
альтернативой метода Select установка Row и Col
более надежный способ
Код: plaintext
1.
2.
VSFlexGrid1.Col =  1  
VSFlexGrid1.Row = nCell1( 0 )
VSFlexGrid1.EditCell
...
Рейтинг: 0 / 0
10.08.2007, 13:07
    #34719679
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VSFlexGrid: программные переходы по ячейкам.
Ничего не помогает
. Эти функции перехода курсора просто не срабатывают в нужном месте, все остальные срабатывают, а они нет. Что это, глюк?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VSFlexGrid: программные переходы по ячейкам. / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]