2

Enter/Return キーを使用して新しい行を作成できないようにしようとしている複数行コントロールがあります。

奇妙なことに、"AcceptsReturn" as False はこれを妨げません。

そこで、以下を追加しました。

Private Sub txtAddr_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtAddr.KeyPress
    If e.KeyChar = Microsoft.VisualBasic.ChrW(13) Then
        e.Handled = True
    End If
End Sub

これは問題なく動作しますが、QA 担当者の 1 人が Control + Enter を押してもまだ改行が挿入されていることを発見しました。

どうすればこれを防ぐことができますか?

そして、AcceptsReturn が False であっても、本来あるべきように機能しないのはなぜですか? それの意図された目的は何ですか?

4

3 に答える 3

4

Ctrl + enter は、改行 ( ASCII 10 ) を生成する可能性が最も高いです。

ただし、特定のシステムに依存する場合があります。

キャリッジ リターン (ASCII 13) とライン フィードをチェックしている場合は、おそらくほとんどのベースがカバーされています。

于 2010-02-11T18:23:42.943 に答える
2

AcceptsReturn プロパティは別の処理を行います。Enter キーは通常、ダイアログの [OK] ボタンを操作します。AcceptsReturn = true の場合、Enter キーは、[OK] ボタンのクリック イベントをアクティブにする代わりに、テキスト ボックスに新しい行を入力します。

Ctrl+Enter を押すと改行が生成され、TextBox はこれも改行として扱います。この KeyDown イベントを使用して、すべての組み合わせをフィルター処理します。

private void textBox1_KeyDown(object sender, KeyEventArgs e) {
  if ((e.KeyData & Keys.KeyCode) == Keys.Enter) e.SuppressKeyPress = true;
}
于 2010-02-11T19:05:34.763 に答える
0

KeyPress イベントではなく、KeyDown でこれをトラップする必要があると思います。

于 2010-02-11T18:23:57.763 に答える