- PR -

textboxをリターンキーで移動するには?

1
投稿者投稿内容
会議室デビュー日: 2003/12/03
投稿数: 3
投稿日時: 2003-12-03 09:20
VB.NETでプログラムの練習を始めたのですが…。
textboxに数値を入力、完了にリターンキーを使用し、リターンキーが押されると次のtextboxに移動するようにしたいのですが、どのようにすればよいのでしょうか?
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2003-12-03 10:03
VB.Netやったことないんですが、
VB6.0では
KeyDownEventがあり、
1.そこでEnterを捉えて
2.次のテキストボックスオブジェクト.setFocusだったかな・・・?

コード:

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
'押したキーが何か確認する為、メッセージボックスで出力。
MsgBox KeyCode
  '実際にやりたい事。
If KeyCode = 13 Then
Text2.SetFocus
Else
End If
End Sub


これはVB6.0のこーどです。
.Netだとやっぱりかなり変わるのかな・・・?


[ メッセージ編集済み 編集者: るぱん 編集日時 2003-12-03 10:11 ]
会議室デビュー日: 2003/12/03
投稿数: 3
投稿日時: 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/07/31
投稿数: 8
投稿日時: 2003-12-03 11:55
藤さん、こんにちは&はじめまして。
(るぱんさん、割ってはいるようで申し訳ないのです。)

フォーカスの遷移について、各コントロールに次のコントロール.Focus()を記述すると、
後から変更になった時、大変です。

フォーム(Me).SelectNextControl()を利用しては如何ですか?

また、継承フォームを利用すると、手間が省けていいです。
------------------------------------------------------------------
・ベースとなるフォームでエンターキーの処理を記述
・おそらく、入力項目の妥当性チェックが必要なので、Overridableな関数を用意
・Tab=Enterを実現するために、ProcessTabKey()をOverrideして、Tabを無効にする
------------------------------------------------------------------

ご参考までに...
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-03 12:08
 Enterキーで次の入力に進むのは、端末頃の仕様なので、「Windows(パソコン)の仕様はこうです」と、Tabキーを使っていただけるようにお願いするのが、ユーザのためでもあるんですけどねぇ。ほとんどのWindowsアプリケーションは、Enterキーは「デフォルトのボタンをクリック」という働きをしますから、他のアプリケーションを使ったときにとまどうことになります。そして、それら他のアプリケーションを使い慣れると、今度は…←という経験をした

###
何でもかんでもユーザの言うなりに作るのが「ソリューション」(解決)ではないはず
ソリューションの提案こそがSEやSIの仕事であり、製品の付加価値ではないか
・・・ということをプログラマから上げても良いと思う←やって、悲惨な思いはした
###


 ちなみにこの問題、過去にあがっています。右上の「検索」で探すか、Insider.NETのページに戻って「会議室ディレクトリ」から「Windows Application」と、その中の「イベントハンドラ」あたりを探ってください。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2003-12-03 15:21
引用:

デフロボさんの書き込み (2003-12-03 11:55) より:
藤さん、こんにちは&はじめまして。
(るぱんさん、割ってはいるようで申し訳ないのです。)

フォーカスの遷移について、各コントロールに次のコントロール.Focus()を記述すると、
後から変更になった時、大変です。

フォーム(Me).SelectNextControl()を利用しては如何ですか?

また、継承フォームを利用すると、手間が省けていいです。
------------------------------------------------------------------
・ベースとなるフォームでエンターキーの処理を記述
・おそらく、入力項目の妥当性チェックが必要なので、Overridableな関数を用意
・Tab=Enterを実現するために、ProcessTabKey()をOverrideして、Tabを無効にする
------------------------------------------------------------------

ご参考までに...



るぱんです。
デフロボ様へ。
お言葉を返す様で申し訳ないですが、
VB6.0 = 手続き型
VB.Net = オブジェクト指向
という違いが有ります。

敢えて違うけれど乗せた事に理由があり、
1.わからない時は藁をもすがる思いで探している。
2.何でもいいからヒントが欲しい。
と考えました。

僕のメインの言語はVB6.0で手続き型です。
違いが有ります。

Javaもやりますんで、オブジェクト指向がどんな物かはわかります。
オブジェクト指向の場合、
一元管理できるオブジェクトにメッセージを投げて
そこから判断させるほうが(運用後を考えると)効率的です。
一元管理できますから。

朝は忙しいけれど、ヒントなら3秒で与えられると思い書きました。

ちなみに、Me.selectNextControle()でやると
タブ順が変わった時にそのまま影響受けますよね。
タブ順は変えたいけど、Enter動作はそのままにしてくれ・・・とか言われると撃沈します。
意図的に支配しておいた方が良くないですか?

それでいいかどうかもJittaさんのご指摘を受けた内容も共に検証する必要が有ります。
そうしないと順番を把握しておいて、一から検証する必要になりますよね。
大変面倒です。

フォームにメソッド追加して切り分けたほうが良くないですかね?
できるかどうかは知りませんが。(汗

あと、開発中に継承させるのはいいですが、
あとで継承元を修正した時に、下の階層のクラスまで一気に影響が噴出しますよ?

テスト全部やり直す・・・?
お金出してくれなさそう・・・。(汗

あと、オーバーライドする場合は、意図的に継承元の抽象クラスを作って
そこから継承させてからにしたほうがいいと思います。

is-a関係の場合修正しやすいです。
has-a関係の場合かなりめんどくさいです。

設計図も綺麗になりますし。
継承は極力しない方がいいですよ。
後でご自分の首をしめると思います。

Jittaさんへ。

僕はめげずに体当たりしてます。(苦笑)
お互い苦労しますね。(笑)
でも、頑張りましょ。(^^
正論言う人がいなくなったらもっと悲惨な目に会いますから。

出ない杭は伸びない!ですよね!?(笑)
会議室デビュー日: 2003/12/03
投稿数: 3
投稿日時: 2003-12-03 20:18
るぱんさん Jittaさん、いろいろありがとうございます。

何分にも初めて VB.NET でプログラムに挑戦していますので、皆様の議論についていけないことばかりです。
ご指摘の内容を、じっくり勉強してみたいと思っています。
ありがとうございました。
今後ともよろしくご指導ください。
1

スキルアップ/キャリアアップ(JOB@IT)