Programing

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

crosscheck 2021. 1. 6. 20:18
반응형

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를 읽기 전용으로 만듭니다. 이 경우 사용자는 자신의 텍스트를 입력하거나 데이터를 변경할 수 없습니다.

단계 :

  1. 콤보 박스를 선택하세요.
  2. 속성 상자로 이동하여 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

반응형