Vsflexgrid: программные переходы по ячейкам.

Тема в разделе "Visual Basic", создана пользователем Normann, 9 авг 2007.

  1. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    Если есть люди которым не жалко своего времени спроектировать алгоритм, пожалуйста отзавитесь, люди добрые, или совет какой дайте, а то знаний маловато.
    Задолбался уже, пишу программу с контролом VSFlexGrid, мне нужно при корректировке индексного поля проверить на совпадение всю колонку, если совпадение есть то значение поля должно вернуться в исходное и включиться режим редактирования поля (EditCell()). Если, вписав не правильное значение, пользователь ушел с ячейки то курсор должен вернуться обратно для ввода правильного значения. Я уже задолбался с реализацией возврата на эту ячейку - не всегда получается программно вернуть фокус на нее (в чем и собственно проблема). Метод Select, которым я устанавливаю положение курсора, не срабатывает при обнаружении повторения в событии AfterEdit, срабатывает только в событии MouseDown. Поэтому курсор вернется в том случае если пользователь ушел этого поля кликом мыши, а вот с другими вариантами(клавиатура, пореря курсора) не получается никак реализовать?

    Код (Text):
    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
     
Загрузка...
Похожие Темы - Vsflexgrid программные переходы
  1. Normann
    Ответов:
    1
    Просмотров:
    2.777
  2. Normann
    Ответов:
    0
    Просмотров:
    2.180

Поделиться этой страницей