bestsource

VB.NET: ComboBox에서 사용자 입력을 방지하는 방법

bestsource 2023. 5. 29. 11:03
반응형

VB.NET: ComboBox에서 사용자 입력을 방지하는 방법

사용자가 정의된 목록의 항목 중 하나만 선택할 수 있도록 ComboBox에서 사용자 입력을 방지하는 방법은 무엇입니까?

콤보 상자의 속성을 다음으로 설정합니다.DropDownList이렇게 하면 목록의 항목만 선택할 수 있으며 자유 형식의 사용자 입력은 허용되지 않습니다.

KeyPressEventArgs를 사용합니다.

Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub

사용자가 자신의 결정을 무시하는 컨트롤을 계속해서 공격하는 것을 보는 것은 슬픈 일입니다.컨트롤의 Enabled 속성을 False로 설정합니다.마음에 들지 않으면 항목 속성을 변경하여 하나의 항목만 선택할 수 있도록 합니다.

ReadOnly 특성을 true로 설정합니다.

또는 콤보 상자를 표시하고 "사용 가능한" 값 목록을 표시하려면 ValueChanged 이벤트를 처리하여 변경되지 않는 값으로 되돌릴 수 있습니다.

설령 질문이marked answered,난 그러고 싶다.add some points하게.

콤보 상자의 속성을 다음으로 설정합니다.DropDownList확실히 효과가 있습니다.

그러나 드롭다운 목록이 더 길면 사용자가 키보드에 액세스할 수 없기 때문에 원하는 항목으로 스크롤해야 합니다.

 Private Sub cbostate_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles cbostate.Validating
    If cbostate.SelectedValue Is Nothing AndAlso cbostate.Text <> String.Empty Then
        e.Cancel = True
        MsgBox("Invalid State")
    End If
End Sub

이렇게 했어요.나는 사용자가 '상태' 대신 '랜덤 값'을 입력하는 것을 제한하고 싶었지만, 계속해서 그는 상태를 입력하고 검색할 수 있어야 합니다.

이것.validating event컨트롤이 손실될 때 발생합니다.focus사용자가 입력하면wrong valuecombobox,그것은 그럴거다.not allow user양식에서 무엇이든 하기 위해, 아마도 콤보 상자에서 포커스를 변경하는 것을 허용하지 않을 것입니다.

이것이 가장 간단한 방법이지만 ComboBox1 이름으로 작동합니다.

3가지 기본 단계의 솔루션:

1단계

양식 시작 부분에 ComboBox의 원래 텍스트 값을 유지할 변수를 선언합니다.예:

     Dim xCurrentTextValue as string

2단계

이벤트 콤보 상자 1 키를 아래로 누르고 xCurrent에 할당합니다.TextValue 변수 "ENTER"와 다른 키를 누른 경우 콤보 상자의 현재 텍스트가 원래 텍스트 값을 유지합니다.

예:

Private Sub ComboBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyDown

    xCurrentTextValue = ComboBox1.Text

    If e.KeyCode <> Keys.Enter Then
        Me.ComboBox1.Text = xCmbItem
    End If

End Sub

3단계

len(xcurrent text value) > 0인 경우 콤보 텍스트가 변경되거나 combobox1이 xcurrent text value 변수 값을 사용하는 경우 확인

Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
    If Len(xCurrentTextValue) > 0 Then
        Me.ComboBox1.Text = xCurrentTextValue

    End If
End Sub

바로 그거야,

원래는 2단계만 시도했지만 DEL 키와 DOWN 화살표 키를 누르면 문제가 발생합니다. 또한 어떤 이유로든 메시지 상자를 표시하지 않으면 키다운 이벤트가 유효하지 않습니다.


!죄송합니다. 이것은 2단계에 대한 수정입니다. xCmbItem 변수를 xCmbItem을 xCurrent로 변경하는 것을 잊었습니다.TextValue, xCmbItem 개인 용도로 사용되었습니다.

올바른 코드입니다.

xCurrentTextValue = ComboBox1.Text

If e.KeyCode <> Keys.Enter Then
    Me.ComboBox1.Text = xCurrentTextValue
End If

형식 수준 cbx 검증 가능한 선언---

Dim cbx as string

Private Sub comboBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Enter
    cbx = Me.comboBox1.Text
End Sub

Private Sub comboBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.Leave
    Me.comboBox1.Text = cbx
End Sub

콤보 상자의 'DropDownStyle' 속성에 'DropDownList'를 사용하면 콤보 상자의 모양과 느낌이 변경되므로 작동하지 않습니다.Visual Studio 2019 Community Edition을 사용하고 있습니다.

'e'를 사용합니다.Handled = True'도 여전히 사용자 입력을 허용하기 때문에 작동하지 않습니다.콤보 상자의 '사용 가능' 속성에 '거짓'을 사용해도 사용자가 콤보 상자를 사용할 수 없게 되므로 작동하지 않습니다.

위에서 제안된 모든 "해결책"은 완전한 쓰레기입니다.실제로 작동하는 것은 위/아래와 같은 특정 키에 대한 사용자 입력을 제한하는 코드입니다(콤보 상자에서 사용 가능한 모든 선택 항목 목록을 탐색하기 위한). 다른 모든 키 입력을 억제합니다.

Private Sub ComboBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles 
  ComboBox1.KeyDown
    REM The following code is executed whenever the user has pressed
    REM a key.  Added on Wednesday 1st January 2020.

    REM Determine what key the user has pressed.  Added on Wednesday
    REM 1st January 2020.
    Select Case e.KeyCode
        Case Keys.Down, Keys.Up
            REM This section is for whenever the user has pressed either
            REM the arrow down key or arrow up key.  Added on Wednesday
            REM 1st January 2020.

        Case Else
            REM This section is for whenever the user has pressed any
            REM other key.  Added on Wednesday 1st January 2020.

            REM Cancelling the key that the user has pressed.  Added on
            REM Wednesday 1st January 2020.
            e.SuppressKeyPress = True

    End Select

End Sub
Private Sub ComboBox4_KeyPress(sender As Object, e As KeyPressEventArgs) Handles ComboBox4.KeyPress
    e.keyChar = string.empty
End Sub

언급URL : https://stackoverflow.com/questions/2773430/vb-net-how-to-prevent-user-input-in-a-combobox

반응형