2017-09-12 74 views
0

組合框不應接受任何輸入和退格。我的代碼接受退格。組合框中的限制不應刪除combox中的文本

Private Sub ComboBox5_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox5.KeyPress 

    If Asc(e.KeyChar) <> 13 And Asc(e.KeyChar) <> 8 And Not IsNumeric(e.KeyChar) Or IsNumeric(e.KeyChar) Then 

     e.Handled = True 
    End If 
End Sub 
+0

只是允許「Enter」而不是限制其他所有內容? – Fejs

+0

你的'如果'陳述是多餘的,很難理解。你真的想要允許/阻止哪些按鍵? FWIW它是你的'Asc(e.KeyChar)<> 8'檢查,允許退格。 –

回答

1

您的描述,您發佈不匹配很好的代碼。我會假設你留下了一些單詞,而你實際上想要允許CR,BKSP和任何數字。它看起來像你只需要一個數字組合框。

正如文森特所說,你的If語句令人困惑。 「不是IsNumeric(e.KeyChar)或IsNumeric(e.KeyChar)」總是評估爲真,基本上是A或不是A.

對於只在ComboBoxes中的數字,我喜歡這種方法,但有很多方法皮膚貓:

Private Sub ComboBox5_KeyPress(sender As Object, e As KeyPressEventArgs) Handles ComboBox5.KeyPress 
    Select Case AscW(e.KeyChar) 
     Case 13 
      'Do whatever you need with CR here 

     Case 8,  3, 22, 24, 26 
      'backsp copy paste cut undo 
      'let 'em be 

     Case Else 
      e.Handled = Not IsNumeric(e.KeyChar) 

    End Select 
End Sub 

如果你真的不想退格,只需從case語句,或者整個case語句刪除8,如果你不希望用戶在所有編輯文本。

+1

爲了提高可讀性和「可修改性」,您可以用一個'AscW()'調用替代所有'Chr()'調用:'Select Case AscW(e.KeyChar)'然後:'Case 3,8,22, (等) –

+1

我編輯了評論,因爲我記得'Chr(<常數>)'也將被編譯成一個常量字符。雖然所有這些電話都很難閱讀。 ;) –

+1

謝謝!使用具有合理名稱的常量更具可讀性,但我沒有花時間將常量添加到此答案中。 – Patrick

0

如果你想限制你的comboBox因此,它不應該接受的輸入。

您可以ComboBoxDropDownStyle屬性設置爲DropDownList

您還可以設置它編程

ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList