Jayanta Modak Ответов: 1

Как перейти к предыдущему управлению, нажав стрелку влево или вверх в vb.net....


привет
Сэр пожалуйста помогите мне как перейти к предыдущему управлению нажав стрелку влево или вверх vb.net
когда я использовал этот код :(стрелка вверх)

If e.KeyCode = Keys.Up Then
    Me.SelectNextControl(sender, False, True, True, True)
End If

проблема в том, что я не изменяю указанный элемент с помощью стрелки вверх в поле со списком. когда я нажимаю стрелку вверх, фокус переходит на предыдущий элемент управления.

когда я использовал этот код :(стрелка влево)
If e.KeyCode = Keys.Left Then
    Me.SelectNextControl(sender, False, True, True, True)
End If

проблема в том, что я не перемещаю курсор с помощью стрелки влево в текстовом поле. когда я нажимаю стрелку влево, фокус переходит на предыдущий элемент управления.

пожалуйста, помогите мне...

Что я уже пробовал:

If e.KeyCode = Keys.Left Then
    Me.SelectNextControl(sender, False, True, True, True)
End If

Richard MacCutchan

Код делает то, что вы написали. Вам нужно изменить его, чтобы разрешить нормальное поведение внутри типов списков или сеток.

1 Ответов

Рейтинг:
0

Wendelius

Если я правильно понял ваш вопрос, вы хотите предотвратить изменение выбранного элемента в выпадающем списке.

Если это правильно, то установите Handled свойство true в вашем коде. Рассмотрим следующий пример:

Private Sub ComboBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyDown
    If e.KeyCode = Keys.Down Then
        Me.SelectNextControl(CType(sender, Control), False, True, True, True)
        e.Handled = True
    End If
End Sub

И то же самое происходит с текстовым полем
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyCode = Keys.Left Then
        Me.SelectNextControl(CType(sender, Control), False, True, True, True)
        e.Handled = True
    End If
End Sub


Дополнение
----------
Проводные события в коде

Например, в событии Form_Loaded проводите все события следующим образом
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For Each mycontrol As Control In Me.Controls
        If TypeOf mycontrol Is TextBox Or TypeOf mycontrol Is ComboBox Then
            AddHandler mycontrol.KeyUp, AddressOf GeneralKeyUpHandler
        End If
    Next
End Sub

и обработчик событий может выглядеть так
Private Sub GeneralKeyUpHandler(sender As Object, e As KeyEventArgs)
    If e.KeyCode = Keys.Left Then
        Me.SelectNextControl(CType(sender, Control), False, True, True, True)
        e.Handled = True
    End If
End Sub


Jayanta Modak

спасибо, сэр, за ваш ответ.
но это не работа.
Private Sub ctrl_next(ByVal sender As System.Объект, бывал е как система.Окна.Формы.KeyEventArgs) обрабатывает cmbitemsalepri.Клавиша вверх, cmbitempurpri.Клавиша вверх, cmbitemmrp.Клавиша вверх, cmbitemopnstk.Клавиша вверх, txtitemcgst.Клавиша вверх, cmbitemsl.Клавиша вверх, cmbitemcl.Клавиша вверх, cmbitemsubcat.Клавиша вверх, cmbitemunit.Клавиша вверх, cmbitemdes.Клавиша вверх, cmbitemnm.Клавиша вверх, cmbitemcate.Клавиша вверх, txtitemsgst.Клавиша вверх, txtitemigst.Клавиша вверх, txtitemcod.Клавиша вверх, cmbhsnitm.Клавиша вверх

Если e.KeyCode = ключи.Тогда Войдите
Me.SelectNextControl(отправитель, истина, истина, истина, истина)
Конец, Если


'Если e.KeyCode = ключи.Осталось Тогда
'Me.SelectNextControl(отправитель, ложь, истина, истина, истина)
-Конец, Если
'Если e.KeyCode = ключи.Осталось Тогда
Меня.SelectNextControl(ctype для(отправитель, контроль), ложь, правда, правда, правда)
'е.Обработано = Истина
-Конец, Если

Конец Подводной Лодки
переходя к следующему элементу управления, я использую ключ ENTER it work fine, но теперь я обновляю свою кодировку обратно к предыдущему элементу управления, как это возможно

Wendelius

Не совсем понимаю, что ты имеешь в виду. Если я тестирую код, он работает так, как ожидалось.

Не могли бы вы более подробно объяснить, как должна работать программа и какая ее часть не работает?

Jayanta Modak

Извините, сэр, я не имею обыкновения говорить, что кодирование неверно, но у меня есть количество combobox и textbox, так что невозможно написать код каждого элемента управления вручную.

Wendelius

Не волнуйтесь, просто спрашивайте больше деталей :)

Итак, вы спрашиваете, как добавить обработчики событий в код вместо того, чтобы делать их вручную?

Wendelius

Взгляните на обновленный ответ

Jayanta Modak

Сэр я использую клавишу управления она работает нормально

Если e.модификаторы = ключи.Управление AndAlso e.KeyCode = ключи.Осталось Тогда
Меня.SelectNextControl(отправитель, ложь, правда, правда, правда)
Конец, Если

Wendelius

Простите, но я не совсем понимаю, что вам нужно.

Не могли бы вы объяснить более подробно, какое поведение вы ищете?