- - PR -
textboxをリターンキーで移動するには?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-12-03 09:20
VB.NETでプログラムの練習を始めたのですが…。
textboxに数値を入力、完了にリターンキーを使用し、リターンキーが押されると次のtextboxに移動するようにしたいのですが、どのようにすればよいのでしょうか? | ||||
|
投稿日時: 2003-12-03 10:03
VB.Netやったことないんですが、
VB6.0では KeyDownEventがあり、 1.そこでEnterを捉えて 2.次のテキストボックスオブジェクト.setFocusだったかな・・・?
これはVB6.0のこーどです。 .Netだとやっぱりかなり変わるのかな・・・? [ メッセージ編集済み 編集者: るぱん 編集日時 2003-12-03 10:11 ] | ||||
|
投稿日時: 2003-12-03 10:55
るぱんさん 返信ありがとうございます
vb.net で、下記のようなコードを作っています。 Private Sub TextBox1_keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If e.KeyChar = Microsoft.VisualBasic.Chr(13) Then TextBox2.Focus() ElseIf e.KeyChar <> Chr( Then If e.KeyChar < "0" Or e.KeyChar > "9" Then e.Handled = True End If End If End Sub この方法で、次々にtextboxをつないでゆくと、スタックオーバー?になってしまいます。 売上伝票等の数値だけを、連続して入力したいのですが、どうすればよいでしょうか? | ||||
|
投稿日時: 2003-12-03 11:55
藤さん、こんにちは&はじめまして。
(るぱんさん、割ってはいるようで申し訳ないのです。) フォーカスの遷移について、各コントロールに次のコントロール.Focus()を記述すると、 後から変更になった時、大変です。 フォーム(Me).SelectNextControl()を利用しては如何ですか? また、継承フォームを利用すると、手間が省けていいです。 ------------------------------------------------------------------ ・ベースとなるフォームでエンターキーの処理を記述 ・おそらく、入力項目の妥当性チェックが必要なので、Overridableな関数を用意 ・Tab=Enterを実現するために、ProcessTabKey()をOverrideして、Tabを無効にする ------------------------------------------------------------------ ご参考までに... | ||||
|
投稿日時: 2003-12-03 12:08
Enterキーで次の入力に進むのは、端末頃の仕様なので、「Windows(パソコン)の仕様はこうです」と、Tabキーを使っていただけるようにお願いするのが、ユーザのためでもあるんですけどねぇ。ほとんどのWindowsアプリケーションは、Enterキーは「デフォルトのボタンをクリック」という働きをしますから、他のアプリケーションを使ったときにとまどうことになります。そして、それら他のアプリケーションを使い慣れると、今度は…←という経験をした
### 何でもかんでもユーザの言うなりに作るのが「ソリューション」(解決)ではないはず ソリューションの提案こそがSEやSIの仕事であり、製品の付加価値ではないか ・・・ということをプログラマから上げても良いと思う←やって、悲惨な思いはした ### ちなみにこの問題、過去にあがっています。右上の「検索」で探すか、Insider.NETのページに戻って「会議室ディレクトリ」から「Windows Application」と、その中の「イベントハンドラ」あたりを探ってください。 | ||||
|
投稿日時: 2003-12-03 15:21
るぱんです。 デフロボ様へ。 お言葉を返す様で申し訳ないですが、 VB6.0 = 手続き型 VB.Net = オブジェクト指向 という違いが有ります。 敢えて違うけれど乗せた事に理由があり、 1.わからない時は藁をもすがる思いで探している。 2.何でもいいからヒントが欲しい。 と考えました。 僕のメインの言語はVB6.0で手続き型です。 違いが有ります。 Javaもやりますんで、オブジェクト指向がどんな物かはわかります。 オブジェクト指向の場合、 一元管理できるオブジェクトにメッセージを投げて そこから判断させるほうが(運用後を考えると)効率的です。 一元管理できますから。 朝は忙しいけれど、ヒントなら3秒で与えられると思い書きました。 ちなみに、Me.selectNextControle()でやると タブ順が変わった時にそのまま影響受けますよね。 タブ順は変えたいけど、Enter動作はそのままにしてくれ・・・とか言われると撃沈します。 意図的に支配しておいた方が良くないですか? それでいいかどうかもJittaさんのご指摘を受けた内容も共に検証する必要が有ります。 そうしないと順番を把握しておいて、一から検証する必要になりますよね。 大変面倒です。 フォームにメソッド追加して切り分けたほうが良くないですかね? できるかどうかは知りませんが。(汗 あと、開発中に継承させるのはいいですが、 あとで継承元を修正した時に、下の階層のクラスまで一気に影響が噴出しますよ? テスト全部やり直す・・・? お金出してくれなさそう・・・。(汗 あと、オーバーライドする場合は、意図的に継承元の抽象クラスを作って そこから継承させてからにしたほうがいいと思います。 is-a関係の場合修正しやすいです。 has-a関係の場合かなりめんどくさいです。 設計図も綺麗になりますし。 継承は極力しない方がいいですよ。 後でご自分の首をしめると思います。 Jittaさんへ。 僕はめげずに体当たりしてます。(苦笑) お互い苦労しますね。(笑) でも、頑張りましょ。(^^ 正論言う人がいなくなったらもっと悲惨な目に会いますから。 出ない杭は伸びない!ですよね!?(笑) | ||||
|
投稿日時: 2003-12-03 20:18
るぱんさん Jittaさん、いろいろありがとうございます。
何分にも初めて VB.NET でプログラムに挑戦していますので、皆様の議論についていけないことばかりです。 ご指摘の内容を、じっくり勉強してみたいと思っています。 ありがとうございました。 今後ともよろしくご指導ください。 |
1