1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. Normann

    Normann Well-Known Member

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

    Код:
    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.858
  2. Normann
    Ответов:
    0
    Просмотров:
    2.265

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