VB2005でfocusをあてるには?

解決


くまきち  2008-02-21 18:26:03  No: 139021  IP: 192.*.*.*

VBは6までしか使用したことがなく、2005は初めたばかりです。

フォーム上にテキストボックスを複数配置しています。
初期表示時、そのうちの1つのテキストボックスに
フォーカスがあたった状態にしたいので、以下のように
書いたのですが、フォーカスがあたりません。
TextBox1.Focus()

CanFocusの戻りもfalseでした。
どこに原因があるのでしょうか。

編集 削除
Hongliang  2008-02-21 18:42:40  No: 139022  IP: 192.*.*.*

微妙に検索しにくい……
http://www.google.co.jp/search?num=100&hl=ja&q=フォーム+フォーカス+VB&lr=lang_ja
で3番目ぐらいに見つかる@ITの記事が答えになるでしょう。

編集 削除
魔界の仮面弁士  2008-02-21 18:45:33  No: 139023  IP: 192.*.*.*

Form の ActiveControl を割り当てることで制御は可能ですが、
わざわざコーディングせずとも、VB6 の時と同様に、デザイン時に
[TabIndex プロパティ]を 0 にしておくだけで十分かと思いますよ。

> TextBox1.Focus()
もし、この方法を使うのであれば、そのコントロールが使用可能な状態に
なっていなければなりません。

たとえば、フォームが表示される前や、TextBox(あるいは、親コンテナ等)が
非表示(Visible = False)や使用不可(Enabled = False)の場合、
Focus メソッドは失敗するかと思います。

編集 削除
くまきち  2008-02-21 18:54:10  No: 139024  IP: 192.*.*.*

>Hongliangさま
ありがとうございます。フォームロード時はFocusできないのですね。
何時間もここで悩んでいたので、助かりました。ありがとうございました。

>魔界の仮面弁士さま
「TabIndexを0にする」!全く気がつきませんでした。
今回はその方法で解決できました。ありがとうございました。

編集 削除
魔界の仮面弁士  2008-02-21 20:38:59  No: 139025  IP: 192.*.*.*

> フォームロード時は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 でいうところの「タブオーダー アドイン」に相当する機能です)

編集 削除
K.M  2008-02-22 17:09:40  No: 139026  IP: 192.*.*.*

今手元にVS2005が無いので確認できませんが、ActiveControlに指定のテキストボックスを設定すればフォーカス行ったような...

編集 削除