VB.NET : ComboBox에서 사용자 입력을 방지하는 방법
사용자가 정의 된 목록의 항목 중 하나만 선택할 수 있도록 ComboBox에서 사용자 입력을 방지하는 방법은 무엇입니까?
DropDownStyle
콤보 상자 의 속성을 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로 설정합니다. 마음에 들지 않으면 항목 속성을 변경하여 하나의 항목 만 선택할 수 있습니다.
Combobox를 읽기 전용으로 만듭니다. 이 경우 사용자는 자신의 텍스트를 입력하거나 데이터를 변경할 수 없습니다.
단계 :
- 콤보 박스를 선택하세요.
- 속성 상자로 이동하여 DropdownStyle을 선택하고 값을 DropdownList로 변경합니다.
ReadOnly 특성을 true로 설정합니다.
또는 콤보 상자가 나타나고 "사용 가능한"값 목록을 표시하려는 경우 ValueChanged 이벤트를 처리하고 변경 불가능한 값으로 강제로 되돌릴 수 있습니다.
이것은 가장 간단한 방법이지만 ComboBox1 이름으로 작동합니다.
3 가지 기본 단계에 대한 솔루션 :
1 단계.
ComboBox의 원래 텍스트 값을 보유 할 양식의 시작 부분에 변수를 선언하십시오. 예:
Dim xCurrentTextValue as string
2 단계.
이벤트 combobox1 키를 아래로 만들고 "ENTER"가 아닌 다른 키를 누르면 콤보 상자의 현재 텍스트를 xCurrentTextValue 변수에 할당합니다. 콤보 상자 텍스트 값은 원래 텍스트 값을 유지합니다.
예:
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 (xcurrenttextvalue)> 0 또는 아무것도 아닌 경우 콤보 텍스트가 변경된 경우 combobox1이 xcurrenttextvalue 변수 값을 사용하는지 확인합니다.
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 키와 아래쪽 화살표 키를 누르면 문제가 발생했습니다. 또한 어떤 이유로 든 메시지 상자를 표시하지 않는 한 keydown 이벤트를 확인하지 않았습니다.
! 죄송합니다, 이것은 2 단계의 수정입니다. xCmbItem 변수를 xCurrentTextValue, xCmbItem으로 변경하는 것을 잊었습니다.
이것은 올바른 코드입니다.
xCurrentTextValue = ComboBox1.Text
If e.KeyCode <> Keys.Enter Then
Me.ComboBox1.Text = xCurrentTextValue
End If
---- in form level Declaration of cbx veriable ----
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
형식을 수정했습니다. 감사합니다.
---- in form level Declaration of cbx veriable ---- 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
Private Sub ComboBox4_KeyPress(sender As Object, e As KeyPressEventArgs) Handles ComboBox4.KeyPress
e.keyChar = string.empty
End Sub
나는 이것이 이런 종류의 문제에 대한 정확하고 가장 간단한 코드라고 생각합니다.
Private Sub CourseName_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles CourseName.KeyPress
e.Handled = True
End Sub
참조 URL : https://stackoverflow.com/questions/2773430/vb-net-how-to-prevent-user-input-in-a-combobox
'Programing' 카테고리의 다른 글
x86 asm에서 대괄호는 무엇을 의미합니까? (0) | 2021.01.06 |
---|---|
웹 주소가 인쇄되지 않도록 내 인쇄 CSS에서 URL을 제거 할 수 있습니까? (0) | 2021.01.06 |
현재 선택된 것을 어떻게 얻습니까? (0) | 2021.01.06 |
ThreadLocals를 정리하는 방법 (0) | 2021.01.06 |
Eclipse Java 실행 구성 파일 경로 (0) | 2021.01.06 |