4

A2003とA2007の両方で作業しています。

フォームが読み込まれたときに、選択したTextBoxがフォーカスを取得するようにするにはどうすればよいですか?MyTextBox.SetFocusをForm_Loadに入れると、次のエラーが発生します。

can't move the focus to the control

このフォームは迅速なデータ入力用に設計されており、最後に使用した設定に基づいてフォームが多少再配置されます。そのため、ユーザーによってはフォーカスが必要なテキストボックスがいくつかあります。MyTextBox TabIndex = 0を指定して、設計時に修正することはできません。

ヘルプには、Repaintの呼び出しについて何かが書かれていますが、まったく意味がありません。

フォーカスは、表示されているコントロールまたはフォームにのみ移動できます。フォームとフォームのコントロールは、フォームのLoadイベントが終了するまで表示されません。したがって、フォームのLoadイベントでSetFocusメソッドを使用してフォーカスをそのフォームに移動する場合は、SetFocusメソッドの前にRepaintメソッドを使用する必要があります。

4

4 に答える 4

2

この場合の最善の策は、フォーカスを取得するテキストボックスの番号がTabIndexプロパティで0になっていることを確認することです。

于 2011-02-25T13:18:33.910 に答える
1

コントロールが実際にはまだ存在しないため、フォーカスを設定することはできません。代わりに、コードをOnActivateイベントに配置してみてください

または、フォーカスを設定する前に、DoCmd.RepaintをOnLoadイベントに入れてください。両方とも動作するはずですが、私はチェックするコンピューターの近くにいません

于 2011-02-25T12:15:33.243 に答える
1

私の経験では、フォーカスを設定しようとしたコントロールが1)表示されないか、2)有効になっていないと、常にエラーが発生します。すでにチェックしていると思いますが、エラーメッセージが表示されたら、実行時に再確認する価値があります(特に、実行時にコントロールをシャッフルしていると言ったため)。

私は.SetFocusメソッドを問題なくかなり定期的に使用しています。Remouが彼の答えで述べたように、すでにそれを持っているコントロールにフォーカスを設定したときにエラーメッセージを受け取ったことを覚えていません。

すべてのレコードがフィルターで除外されバインドされたフォームのフォームヘッダー/フッターのコントロールにフォーカスを設定しようとすると、3番目のケースも発生すると思います。状況によって、バインドされていないコンボボックスのコンテンツが「消える」ことはわかっていますが、SetFocusメソッドでも大混乱を引き起こす可能性があると思います。ただし、データ入力モードでフォームを開いている場合は、問題にはなりません。

于 2011-02-25T14:15:47.503 に答える
1

SetFocusをフォームのOnCurrentイベントに移動します。フォームのレコードソースにレコードが含まれておらず、フォームのAllow AdditionsプロパティをNoに設定していない限り、機能するはずです。その場合、テキストボックスはSetFocusで使用できませんが、私のテストではエラーはスローされません。 。

于 2011-02-25T16:48:53.277 に答える