VBは6までしか使用したことがなく、2005は初めたばかりです。
フォーム上にテキストボックスを複数配置しています。
初期表示時、そのうちの1つのテキストボックスに
フォーカスがあたった状態にしたいので、以下のように
書いたのですが、フォーカスがあたりません。
TextBox1.Focus()
CanFocusの戻りもfalseでした。
どこに原因があるのでしょうか。
微妙に検索しにくい……
http://www.google.co.jp/search?num=100&hl=ja&q=フォーム+フォーカス+VB&lr=lang_ja
で3番目ぐらいに見つかる@ITの記事が答えになるでしょう。
Form の ActiveControl を割り当てることで制御は可能ですが、
わざわざコーディングせずとも、VB6 の時と同様に、デザイン時に
[TabIndex プロパティ]を 0 にしておくだけで十分かと思いますよ。
> TextBox1.Focus()
もし、この方法を使うのであれば、そのコントロールが使用可能な状態に
なっていなければなりません。
たとえば、フォームが表示される前や、TextBox(あるいは、親コンテナ等)が
非表示(Visible = False)や使用不可(Enabled = False)の場合、
Focus メソッドは失敗するかと思います。
>Hongliangさま
ありがとうございます。フォームロード時はFocusできないのですね。
何時間もここで悩んでいたので、助かりました。ありがとうございました。
>魔界の仮面弁士さま
「TabIndexを0にする」!全く気がつきませんでした。
今回はその方法で解決できました。ありがとうございました。
> フォームロード時はFocusできないのですね。
そのような目的であれば、Shown イベントを使うべきですが、
Load 中であっても、できないというわけではありません。
先に書いたように、フォームが非表示の間は、フォーカスを持てないというだけなので、
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Show()
TextBox1.Focus()
End Sub
などとする事が可能です。あまりお薦めはしませんけれども。
そしてこの、非表示だとフォーカスを当てられないという仕様は、
別に.NET に限った話では無く、VB6 でも同じことです。
(VB6 の使用経験は御有りなのですよね?)
ちなみに、.NET の Focus は失敗時に False を返しますが、VB6 の SetFocus は、
エラー「プロシージャの呼び出し、または引数が不正です。」を発生させます。
> 「TabIndexを0にする」!全く気がつきませんでした。
ちなみに、ツールバーや[表示]メニューには、「タブ オーダー」という機能があり、
これを使うと、タブ順の制御を簡単に行えるようになります。
(これは、VB6 でいうところの「タブオーダー アドイン」に相当する機能です)
今手元にVS2005が無いので確認できませんが、ActiveControlに指定のテキストボックスを設定すればフォーカス行ったような...
編集 削除