dポイントプレゼントキャンペーン実施中!

ご多忙中大変申し訳ありません。
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 です。

ご迷惑を、おかけしますが、どうかご助力をお願いいたします。

「TabIndexを使わないで、フォーカス」の質問画像

A 回答 (2件)

どこがどううまくいかないんでしょうか?


書かれているコードは、TextBox15の次がTextBox16となってしまう点だけ除けば問題ないと思いますが。
    • good
    • 0
この回答へのお礼

お返事有難う御座いました。nag0720さんのご指摘のとおり、TextBox15の次がTextBox16となってしまう点だけ除けば問題なく、↓キーによるフォーカスの移動はできていました。
何回もテストしているうちに、わけがわからなくなってしまい、「これはできない」と判断してしまったのかもしれません。ご迷惑おかけしました。

nicotinismさん、nag0720さん、まだまだわからないことだらけですので、これからも宜しくおねがいします。

解決した場合は、ベストアンサーを選ばないといけませんので、nicotinismさん、nag0720さんご両者の回答をベストアンサーにしたいのですが、そのような設定はありませんので、nag0720さんの回答をベストアンサーにさせてください。

お礼日時:2012/07/24 06:09

コントロール配列 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の増減
範囲外のチェック・・
でいけませんかね?
    • good
    • 0
この回答へのお礼

わざわざ、調べてくださり有難うございました。nag0720さんの言われるとおり、
TextBox15の次がTextBox16となってしまう点だ修正すれば、↓キーのフォーカスは出来ていました。お騒がせして申し訳ありませんでした。

お礼日時:2012/07/24 05:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!