powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Усовершенствование ComboBox
5 сообщений из 5, страница 1 из 1
Усовершенствование ComboBox
    #32568785
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня возникла необходимость создать свой компонент с нужным мне свойством (combobox с выбором значений при нажатии клавиш)... О существовании Infragistics и т.д. я прекрасно знаю, но нужно было именно свой combo (на основе стандартного)
В прилагаемом проекте описана проблема...
Помогите, если в силах plz...

P.S. Проект намеренно создан не на основе ComponentClass (дабы не затруднять тестирование)
...
Рейтинг: 0 / 0
Усовершенствование ComboBox
    #32571738
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел сейчас ваш код, странно что вы хотите залочить комбинации клавиш CTR+C, CTR+V.

Теперь по делу. Один из вариантов, хороший или плохой покажет время :-).

Вводим в свой класс ComboBox переменную например с таким названием:
Код: plaintext
1.
Private m_handle as Boolean

В KeyDown проверим нажат ли control если да, то me.m_handled = true, если нет me.m_handled = false.

В KeyPress:
Код: plaintext
1.
e.handled = me.m_handled

В KeyUp выше уже имеющего вашего кода:
Код: plaintext
1.
2.
3.
4.
If m_handled = true Then
    e.Handled = true
    return
end if

Если что непонятно проиллюстрирую примером.
...
Рейтинг: 0 / 0
Усовершенствование ComboBox
    #32571812
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил свои мысли на практическом примере.
Заместо Exit Sub в KeyUp поставил Exit For.
Заметил что Ctrl+Delete нехорошо себя ведет, поэтому пришлось добавить ProcessCmdKey, ну и вообщем вот что получилось:

Код: 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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
Public Class MyComboBox
    Inherits ComboBox
    Private m_handled As Boolean = False
    Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)
        If m_handled = True Then
            e.Handled = True
            Return
        End If
        Console.WriteLine(e.KeyCode)
        Select Case e.KeyCode
            Case Keys.Control
            Case Keys.ControlKey

            Case Keys.ShiftKey
            Case Keys.Shift

            Case Keys.Delete
            Case Keys.End
            Case Keys.PageDown
            Case Keys.PageUp
            Case Keys.Pause
            Case Keys.Home
            Case Keys.Help

            Case Keys.Enter
            Case Keys.Back
            Case Keys.Escape
            Case Keys.Tab
            Case Keys.None >  222 

            Case Else
                Dim m As String = Me.Text
                If Not (m = Nothing) Then
                    For Each c As String In Me.Items
                        If c.ToUpper.StartsWith(m.ToUpper) Then
                            Me.SelectedItem = CObj(c)
                            Me.Select(m.Length, Me.Text.Length - m.Length)
                            Exit For  ' by Sa Поменял эту строчку 
                        End If
                    Next
                End If
        End Select
        MyBase.OnKeyUp(e)
    End Sub

    Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
        e.Handled = Me.m_handled
        MyBase.OnKeyPress(e)
    End Sub

    Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
        If e.Control = True Then
            Me.m_handled = True
            Return
        End If
        Me.m_handled = False
        MyBase.OnKeyDown(e)
    End Sub

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        If keyData = (Keys.Control Or Keys.Delete) Then
            Return True
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function
End Class

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Усовершенствование ComboBox
    #32572596
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ...
Логика была не в том что-бы вообще закрыть комбинацию клавиш, а в том что-бы при нажатии комбинации визуально в Combo ничего не менялось, а сама комбинация работала как ей и следует "опять я неправильно сформулировал задачу :((" Хотя, закрыть некоторые комбинации или клавиши конечно же следует Вообщем, будем дорабатывать (если посетят мысли по улучшению - не стесняйтесь, ДЕЛИТЕСЬ)

Кстати, я забыл добавить в начальный код ещё и это (клавиши up, down, left, right начинают вести себя как и положено)

Код: plaintext
1.
2.
3.
4.
 Case Keys.Up
 Case Keys.Down
 Case Keys.Left
 Case Keys.Right


P.S. Infragistics, уже нервно курит, надеясь, что у нас ничего не получится, но ведь нам их буржуйские амбиции до ФЕНИ :)))
...
Рейтинг: 0 / 0
Усовершенствование ComboBox
    #32573642
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УРА ПОЛУЧИЛОСЬ...
combobox с выбором значений при нажатии клавиш

Хочешь быть тестовым пилотом - качай dll
P.S. О проблемах с использованием dll - пишите в топик...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Усовершенствование ComboBox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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