お世話になります。
VB2008でプログラムを開発しています、
戸惑ってしまい教えて頂きたく投稿しました。
-------------------パターン1-------------------------------
Dim name As String = "TextBox1"
Dim control As TextBox = TryCast(Me.Controls(name), TextBox)
If Not control Is Nothing Then control.Text = "ABC"
-------------------パターン2-------------------------------
Dim name As String = "TextBox1"
Dim control As TextBox = TryCast(Me.Controls(name), TextBox)
If Not control Is Nothing Then control.Focus()
------------------------------------------------------------
パターン1ではテキストボックスにデータをセットできるのですが、
同じ要領で動くと思いパターン2を作ってみました、でもフォーカス
が移りません、いろいろ調べましたが解決できません、よい方法が
ありましたら教えて下さい、よろしくお願いします。
名前によるアクセスではなく、直接 TextBox1.Focus() でフォーカスすることは可能なのですか?
編集 削除すいません説明が不十分でした、FormにTextBox1(タブオーダー2)とTextBox2
(タブオーダー1)を貼り付けています、現象はForm_Load時に起きます。
ボタンを追加し、以下のコードにて確認したところ正常に動きました。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim name As String = "TextBox1"
Dim control As TextBox = TryCast(Me.Controls(name), TextBox)
If Not control Is Nothing Then control.Focus()
End Sub
原因は名前代入によるアクセスでなく、Form_Loadにあったようです。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Focus() 'フォーカス移動しない
End Sub
指定のコントロールにForm_Load時、フォーカスを移動するにはどう
したらよいのでしょうか?
> 指定のコントロールにForm_Load時、フォーカスを移動するにはどう
> したらよいのでしょうか?
コードでどうにかするのではなく、デザイン時に TextBox1 の TabIndex を
最小番号にしておくのが本来のやり方だと思いますよ。
# Compact Framework の場合は、TabIndex が無いので、
# Controls.Add の順番で制御する事になりますけど。
で、フォーカスはそもそも、そのコントロールが使用可能でなければ
意味を為しません。そのため、コントロール自身あるいは親となる
フォームやコントロールが、非表示または使用不可の状態の場合、
Focus メソッドは機能しません。
つまり、Form が Visible = True の状態になっているなら、Load 中でも
フォーカス遷移させられますが…Load 中に自分を表示させるぐらいなら、
Shown イベントを使うべきでしょう。
もし、どうしても Form の Load で制御しなければならないのであれば、
Me.ActiveControl = TextBox1
という方法もあるにはあります。
方法はいろいろあるんですね!!
無事解決しました、ありがとうございます。