ご多忙中大変申し訳ありません。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
"判定"の英語表現について
-
vba ListViewの選択色について...
-
一目惚れってどんな感覚?
-
以前アクティブだったウィンド...
-
VBEとVBA
-
エンジンスコープ について
-
客からクレームを受けました。 ...
-
【モーションデザイナーになる...
-
For ~ Next の中での Dim宣言...
-
X線CTにおけるコリメータの役割...
-
SetTimer関数について。
-
【至急】フォトショップの「自...
-
メッセージボックスを前面に表...
-
波紋を呼ぶ、波紋が広がる・広...
-
業務に差し支えのないテンキー...
-
Windows 10 で 外字を作る方法
-
波紋
-
C#でButtonのフォーカス枠を消...
-
コンボボックスの三角を一時的...
-
WavePad m4a 左右チャンネル合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
"判定"の英語表現について
-
vba ListViewの選択色について...
-
DBマジック
-
For ~ Next の中での Dim宣言...
-
X線CTにおけるコリメータの役割...
-
以前アクティブだったウィンド...
-
VBEとVBA
-
textBoxに数値を入力すると円と...
-
一目惚れってどんな感覚?
-
Detected memory leaks!
-
大腿骨の骨梁
-
グローバル変数について (C言語)
-
Shellコマンドで別のexeを起動...
-
NOVAのCMで、まるで関西...
-
プログラム中の大カッコについて
-
Wacomのタッチ機能が反応しませ...
-
プログラミングコードの出てく...
-
マジックの再生方法
-
客からクレームを受けました。 ...
-
iPhone 14 Pro 対 GNS3000 のGP...
おすすめ情報