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 value
에combobox
,그것은 그럴거다.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
'bestsource' 카테고리의 다른 글
루비에서 -> 연산자를 뭐라고 부르나요? (0) | 2023.06.03 |
---|---|
Azure에서 이메일 보내기 (0) | 2023.05.29 |
문자열 목록을 구분 기호로 구분된 문자열로 변환 (0) | 2023.05.29 |
사용 MongoClient(Mongoose 4.11.0)를 설정하는 방법은 무엇입니까? (0) | 2023.05.29 |
ASP.NET MVC Core의 드롭다운 목록에 열거형 사용 (0) | 2023.05.29 |