2017-09-12 12 views
0

Comboboxは入力とバックスペースを受け入れてはいけません。私のコードはバックスペースを受け入れます。comboboxのRestricitonは、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

あなたの 'If'文は冗長であり、理解するのが難しいです。あなたが実際に許可/ブロックしようとしているキープレスは何ですか? FWIWは、バックスペースを許可する 'Asc(e.KeyChar)<> 8'チェックです。 –

答えて

1

あなたの記述、あなたがうまく一致しない投稿のコードを、それを設定することができ、あなたのComboBox

DropDownListへの DropDownStyleプロパティを設定することができます。私はいくつかの言葉を残して、あなたは実際にCR、BKSP、および任意の数値を許可したいと仮定するつもりです。あなたが数字だけのComboBoxを望むように見えます。

あなたのIfステートメントは混乱しています。 "Not IsNumeric(e.KeyChar)またはIsNumeric(e.KeyChar)"は常にtrueと評価され、基本的にはAまたはNotAです。

ComboBox内の数値については、このメソッドが好きです。その猫の皮膚:あなたは本当にバックスペースを望んでいなかった場合は、ユーザーがすべてのテキストを編集したくない場合は

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

可読性と "変更可能性"を向上させるために、 'Chr()'呼び出しを 'AscW()'呼び出しで置き換えることができます: 'Select Case AscW(e.KeyChar)' ' 24、26'(など) –

+1

Chr()も定数charにコンパイルされることを思い出してコメントを編集しました。それらのすべての呼び出しで読むのは難しいですが。 ;) –

+1

ありがとう!名前が意味を持つ定数を使用する方が読みやすいですが、私はこの答えに定数を追加する時間がかかりませんでした。 – Patrick

0

あなたはそれを受け入れるべきではありませんcomboBoxように入力を制限したい場合。

あなたはまた、プログラム

ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList 
関連する問題