powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VSFlexGrid: программные переходы по ячейкам.
4 сообщений из 4, страница 1 из 1
VSFlexGrid: программные переходы по ячейкам.
    #34718396
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть люди которым не жалко своего времени спроектировать алгоритм, пожалуйста отзавитесь, люди добрые, или совет какой дайте, а то знаний маловато.
Задолбался уже, пишу программу с контролом 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
VSFlexGrid: программные переходы по ячейкам.
    #34718845
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуй использовать фокус на котрол и метод ShowCell

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


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