- PR -

CanFocus=Trueだが、FocusするとFalseが返ってくる

1
投稿者投稿内容
koko
会議室デビュー日: 2004/09/20
投稿数: 9
投稿日時: 2004-10-19 17:09
こんにちは。KOKOと申します。

現在、VB.net2003 + SQLServer2000にて、Windowsアプリを開発しております。

いくつか独自に作成したユーザーコントロールを使用しているのですが、

CanFocusプロパティはTrueにもかかわらず、
それらに.Focus すると、戻り値にFalseが返ってきます。

これは.netのバグなんでしょうか?それとも仕様?
(もしくは仕様という名のバグ?w)

とりあえずは、.Focusした後に、.ContainsFocusプロパティで、
フォーカスが受け取られているかをチェックしていますが、
ちょっと気持ち悪いので、この現象についてもしご存知の方がいらっしゃれば、
ご教授いただければ幸いです。

よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-19 19:26
 フレームワークのバグを疑う前に、自分のコードや理解のバグを疑うべき、だと思います。で、MSの技術情報を、「KBBUG」をキーにして検索するとバグ情報が、「KBFIX」をキーにして検索すると修正済みのバグ情報が出てくるのですが(その他は、私のウェブページからリンクしているページを参照)、探してみました?

 で、とりあえず。。。
引用:

Control.CanFocus プロパティより:
コントロールが入力フォーカスを受け取るには、コントロールにハンドルが割り当てられていて、 Visible プロパティと Enabled プロパティが両方とも true に設定されている必要があります。


引用:

Control.Focus メソッドより:
コントロールは、フォーカスのあるビジュアル キューを表示していないときに、入力フォーカスを得ることができます。この動作は、主に、次に一覧表示する選択できないコントロール、またはそれらのコントロールから派生したコントロールで行われます。

コントロールは、ある条件がすべて true の場合に、選択可能であり、入力フォーカスを受け取ることができます。この条件とは、コントロールの ControlStyles.Selectable スタイル ビットが true に設定されていること、コントロールが別のコントロールに格納されていること、およびすべての親コントロールが表示されており、有効であることです。



この辺の条件は、クリアしていますか?
_________________
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-19 22:08
南部です。

バグかどうか疑うまでもなく、
ドキュメントに説明されているとおりの動きだと思いますが。

UserControlはContainerControlのサブクラスなので、
フォーカスを受け取ると、コンテナ内のコントロールの
コレクション内にある最初の子コントロールに設定されます。
なので、UserControlのFocus()メソッドの戻り値はfalseです。

ちなみにUserControlに子コントロールがない場合、
UserControlのFocus()メソッドの戻り値はtrueです。
つまり、UserControl自身がフォーカスを受け取っています。
#当然UserControlのGotFocusイベントも発生します。

以上。
koko
会議室デビュー日: 2004/09/20
投稿数: 9
投稿日時: 2004-10-20 10:13
kokoです。
南部様、Jitta様:

早速のレスありがとうございます。

> UserControlはContainerControlのサブクラスなので、

うっ、おっしゃるとおりですね。
MSDNヘルプやバグレポートは一通り見ていたつもりだったのですが、
そもそもどこかで勝手にSystem.Windows.Forms.Controlだと勘違いしていました。。。
申し訳ありません。m(__)m (恥ずかし〜)
そもそも根本的に間違ったところで探していたため、しょーもないところではまってしまいました。
ご指導ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)