ご多忙中大変申し訳ありません。
VBの初心者です。
TabIndexを使わないで、コントロールの名前の番号でフォーカスの移動をしたいのですが、私のレベルでは全くできません。
TextBox1、TextBox2、TextBox3、TextBox3、~TextBox15
のようにTextBoxの後ろに付いている、数字を利用してフォーカスの移動をしたいと思っております。
実装前に下記のようなコードを書いてテストしていますが、どこを調べても、また試行錯誤を繰り返してもできません。
Public Class Form1
'テスト
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.KeyPreview = True
'1列目TextBoxの生成
Dim i As Integer
For i = 0 To 4
Dim txtbx As New TextBox
txtbx.Size = New Size(105, 30)
txtbx.Location = New Point(50, 50 + i * 40)
txtbx.Font = New Font("MSゴシック", 12, FontStyle.Regular)
txtbx.TabIndex = i * 3
txtbx.Text = "TabIndexは" & CStr(i * 3)
txtbx.Name = "TextBox" & CStr(i + 1)
Me.Controls.Add(txtbx)
Next
'2列目TextBoxの生成
For i = 0 To 4
Dim txtbx As New TextBox
txtbx.Size = New Size(105, 30)
txtbx.Location = New Point(160, 50 + i * 40)
txtbx.Font = New Font("MSゴシック", 12, FontStyle.Regular)
txtbx.TabIndex = i * 3 + 1
txtbx.Text = "TabIndexは" & CStr(i * 3 + 1)
txtbx.Name = "TextBox" & CStr(i + 6)
Me.Controls.Add(txtbx)
Next
'3列目TextBoxの生成
For i = 0 To 4
Dim txtbx As New TextBox
txtbx.Size = New Size(105, 30)
txtbx.Location = New Point(270, 50 + i * 40)
txtbx.Font = New Font("MSゴシック", 12, FontStyle.Regular)
txtbx.TabIndex = i * 3 + 2
txtbx.Text = "TabIndexは" & CStr(i * 3 + 2)
txtbx.Name = "TextBox" & CStr(i + 11)
Me.Controls.Add(txtbx)
Next
End Sub
Private Sub Form1_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Right Then '→キーによるフォーカスの移動
Me.SelectNextControl(ActiveControl, True, True, True, False)
e.Handled = True
ElseIf e.KeyCode = Keys.Left Then '←キーによるフォーカスの移動
Me.SelectNextControl(ActiveControl, False, True, True, False)
e.Handled = True
End If
'↓(Down)キーによるフォーカスの移動 ここができません。
If e.KeyCode = Keys.Down Then
Dim txtboxname As String
txtboxname = Me.ActiveControl.Name 'TextBoxの名前の名前の取得
Dim txtbxnum As String
txtbxnum = txtboxname.Remove(0, 7) 'TextBox~の名前から、~(数字)だけにする。
Dim controlName As String
controlName = "TextBox" & CStr((CInt(txtbxnum) + 1)) 'TextBox~の名前の~に1を足す。
Me.Controls(controlName).Select() 'TextBox~+1のTextBoxをフォーカス
'Select() Focus()も結果は同じです。
End If
'↑(Down)キーによるフォーカスの移動
'この部分は、↓(Down)キーによるフォーカスの移動が出来るようになりましたら、追加します
End Sub
' Enterキーによるフォーカスの移動
Private Sub Form1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
If e.KeyChar = Chr(Keys.Enter) Then
Me.SelectNextControl(ActiveControl, True, True, True, True)
e.Handled = True
End If
End Sub
End Class
最終的な目的の動作は、EnterキーではTabIndexの順番にフォーカスの移動。
←キーでは、左にフォーカスの移動。
→キーでは、右にフォーカスの移動。
↑キーでは、上にフォーカスの移動。
↓キーでは、下にフォーカスの移動。
コントロールの名前の番号でフォーカスの移動をしたい理由は、
Enterキーと←、→キーによるフォーカスの移動でTabIndexの順番を使い、上下方向、↑キー、↓キー移動には、TabIndexの順番が画像のように少々複雑になってしまい、TabIndexを使用してのフォーカスの移動は断念しました。
もし、TabIndexでフォーカスの移動が出来るようなら、そちらのほうでもかまいません。
使用バージョンは、VB2010 Express Edition です。
ご迷惑を、おかけしますが、どうかご助力をお願いいたします。
No.2ベストアンサー
- 回答日時:
どこがどううまくいかないんでしょうか?
書かれているコードは、TextBox15の次がTextBox16となってしまう点だけ除けば問題ないと思いますが。
お返事有難う御座いました。nag0720さんのご指摘のとおり、TextBox15の次がTextBox16となってしまう点だけ除けば問題なく、↓キーによるフォーカスの移動はできていました。
何回もテストしているうちに、わけがわからなくなってしまい、「これはできない」と判断してしまったのかもしれません。ご迷惑おかけしました。
nicotinismさん、nag0720さん、まだまだわからないことだらけですので、これからも宜しくおねがいします。
解決した場合は、ベストアンサーを選ばないといけませんので、nicotinismさん、nag0720さんご両者の回答をベストアンサーにしたいのですが、そのような設定はありませんので、nag0720さんの回答をベストアンサーにさせてください。
No.1
- 回答日時:
コントロール配列 vb.net
でGoogleっただけですけど (^^ゞ
http://www.geocities.jp/hatanero/indexer.html
などが参考になるかと思います。
また、たとえば、TabIndex【6】を例にとると
3列5行のレイアウトなので
6 ÷ 3 の商 + 1 で行位置が → 3
6 ÷ 3 の余り で列位置が得られますので → 0
これを座標代わりに使って
左右キーなら
・・・・・・
ではなくて。。。単純に6±1の増減を
上下キーなら6±3の増減
範囲外のチェック・・
でいけませんかね?
わざわざ、調べてくださり有難うございました。nag0720さんの言われるとおり、
TextBox15の次がTextBox16となってしまう点だ修正すれば、↓キーのフォーカスは出来ていました。お騒がせして申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
"判定"の英語表現について
-
自動で半角カナ入力となるTextBox
-
vba ListViewの選択色について...
-
PICでライントレーサー(C言語)c...
-
Wacomのタッチ機能が反応しませ...
-
画像ファイルを開くと、フォト...
-
至急!! ノートパソコンを3年...
-
クラリスインパクトのファイル...
-
Excelのマクロで実行時エラー”1...
-
どこにもフォーカスを当てたくない
-
ザベストテン風ランキング動画...
-
Windows7でクリップボードを開...
-
ゆっくりムービーメーカーでセ...
-
コンボボックスの開いたリスト...
-
メッセージボックスを前面に表...
-
Windows PowerShellがいっぱい...
-
VLCの再生時の色がおかしく...
-
自作パソコンのCPU使用率が急に...
-
Chrome フォーカス時に枠が表示...
-
他の人には声だして挨拶してる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
"判定"の英語表現について
-
vba ListViewの選択色について...
-
DBマジック
-
For ~ Next の中での Dim宣言...
-
Wacomのタッチ機能が反応しませ...
-
X線CTにおけるコリメータの役割...
-
プログラム中の大カッコについて
-
大腿骨の骨梁
-
以前アクティブだったウィンド...
-
Detected memory leaks!
-
NOVAのCMで、まるで関西...
-
Visual Studio 2010の配色
-
一目惚れってどんな感覚?
-
グローバル変数について (C言語)
-
ENTERキーでフォーカスを移動し...
-
ウィルコムのwx340kという機種...
-
Swishの利用方法についてかかれ...
-
iPhone 14 Pro 対 GNS3000 のGP...
-
textBoxに数値を入力すると円と...
-
Shellコマンドで別のexeを起動...
おすすめ情報