- PR -

TextBoxのフォーカス

1
投稿者投稿内容
根性
常連さん
会議室デビュー日: 2004/03/10
投稿数: 39
投稿日時: 2004-09-16 17:19
C#でWindowsApplicationを開発しています。

Formに二つTextBoxがあります。名前はtextBox1とtextBox2です。

texBox1のGotFoucsエベント

@マウスダウンでGotFoucsエベントを呼び出す場合、「textBox2.Foucs();」を実行すれば、textBox1_GotFocusは2回実行されます。「textBox2.Foucs();」は無効になりましたら、textBox1_GotFocusは1回実行されます。

ATabキーでGotFoucsエベントを呼び出す場合、「textBox2.Foucs();」を実行する、しないに関わらず、textBox1_GotFocusは1回しか実行されません。

上記の二つ状況は何の区別を教えていただけませんか。どうしてマウスダウンでGotFoucsエベントを呼び出したら、「textBox2.Foucs();」を1回だけ実行しますか。

以上、よろしくお願いいたします。
_________________
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-09-16 19:06
こんにちは。

この質問の文章だと少し意味がわかりません。
(この質問や過去の投稿から、根性さんは日本の方ではないと推測します。)

できればソースコードを提示してください。
そうすれば、答える側の理解の助けとなります。

ポイント
・(1)のマウスダウンは、どのオブジェクトのイベントでしょうか?
・(2)のTabキーは、どのオブジェクトにフォーカスがあたっているときに押しましたか?
・(1)と(2)の「textBox2.Focus();」は同じ箇所から呼び出されるコードでしょうか?

#ちなみに日本語では「エベント」ではなく「イベント」と記述します。
根性
常連さん
会議室デビュー日: 2004/03/10
投稿数: 39
投稿日時: 2004-09-17 10:15
noderaさん、おはようございます。
今日本語を勉強していますから、意味がよく言い表されないのはすみません。^0^
ご指摘有難うございました。

ソースコード
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
private void InitializeComponent()
{

this.textBox1.GotFocus += new System.EventHandler(this.textBox1_GotFocus);

this.textBox2.GotFocus += new System.EventHandler(this.textBox2_GotFocus);

}
private void textBox1_GotFocus(object sender, System.EventArgs e)
{
  textBox4.Focus();
  textBox3.Text = (Int32.Parse(textBox3.Text) + 1).ToString();
}

private void textBox2_GotFocus(object sender, System.EventArgs e)
{
  textBox4.Text = (Int32.Parse(textBox4.Text) + 1).ToString();
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

>ポイント
>・(1)のマウスダウンは、どのオブジェクトのイベントでしょうか?
◆マウスダウンはオブジェクトのイベントではなく、textBox1_GotFocusの呼び出す方法で  す。
>・(2)のTabキーは、どのオブジェクトにフォーカスがあたっているときに押しましたか?
◆ フォーカスがあたっているオブジェクトは関係がないが、Tabキーを通って、texBox1_GotFoucsを呼び出せればと思います。
>・(1)と(2)の「textBox2.Focus();」は同じ箇所から呼び出されるコードでしょうか?
◆はい、同じ箇所から呼び出されるコードです。

_________________
根性
常連さん
会議室デビュー日: 2004/03/10
投稿数: 39
投稿日時: 2004-09-23 11:21
ご存知でしたら、教えてお願いいたします。
_________________
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-09-24 13:17
こんにちは。

提示していただいたコードをこちらでも実行してみましたが、確かに同じ現象になりました。
Tabキーでの移動では、WM_SETFOCUSメッセージが1度しか発生しないのですが、マウスでクリックした場合は、WM_SETFOCUSメッセージが2度発生しています。

WM_SETFOCUSメッセージを処理中に他のコントロールへフォーカスを移動とが、マウスクリックと相性がわるいのでしょうか。。。「なぜ」そうなるのかまでは分かりませんでした。
このメッセージの発生の原理が分かる方、お願いします > 識者の方々

ところで、GotFocusイベントの中で他のコントロールへフォーカスを移動するという方法は、仕様上どうしても必要な処理なのでしょうか?
代案として直接Focusメソッド呼ばずにBeginInvokeで非同期に呼び出してみるってのも手かもしれません。



根性
常連さん
会議室デビュー日: 2004/03/10
投稿数: 39
投稿日時: 2004-09-28 11:36
すみませんが、詳しい説明をいただけませんか。
_________________
1

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