- PR -

フォームのActiveControlが変わったときに発生するイベントはありますか

投稿者投稿内容
futa
会議室デビュー日: 2007/03/27
投稿数: 9
投稿日時: 2007-03-27 13:19
フォームのActiveControlが変わった(フォーム上のコントロール1のフォーカスがコントロール2に移動した)ときにフォーム側で発生するイベントがあったらどなたか教えていただけますでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-27 13:35
futa さん、こんにちは。

引用:

futaさんの書き込み (2007-03-27 13:19) より:

フォームのActiveControlが変わった(フォーム上のコントロール1のフォーカスがコントロール2に移動した)ときにフォーム側で発生するイベントがあったらどなたか教えていただけますでしょうか。


そのようなイベントは用意されていませんが、自作することはできるかと思います。
たとえば、安易な考えとして UpdateDefaultButton メソッドをオーバーライドするという方法があります。

ただし、UpdateDefaultButton メソッドはコンテナ内において、
'そのコンテナがネストされた数' 連続して発生しますので、ご注意ください。

# もともと、インフラ用のメソッドですので、使い方としては間違っていると思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-03-27 13:49
例えばこんな感じで全てのコントロールのGotFocusイベントを同一のイベントハンドラで処理するとか。
以下の例だと、パネルなどに張り付いたコントロールのイベントは取得できないので工夫してください。

コード:
public Form1()
{
    InitializeComponent();
    foreach (Control control in this.Controls)
    {
        control.GotFocus += new EventHandler(control_GotFocus);
    }
}

void control_GotFocus(object sender, EventArgs e)
{
    //
    // フォーム上のフォーカスが変更されたら発生
    //
    System.Diagnostics.Debug.WriteLine(sender.ToString());
}

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-27 14:03
引用:

burton999さんの書き込み (2007-03-27 13:49) より:

例えばこんな感じで全てのコントロールのGotFocusイベントを同一のイベントハンドラで処理するとか。


GotFocus イベント...?

引用:

以下の例だと、パネルなどに張り付いたコントロールのイベントは取得できないので工夫してください。


無用な補足をしますと、コンテナに子コントロールが含まれる場合のみ再帰させなさい。
ということですね。

# ときに 「言語」 が不明なまま...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-03-27 14:13
引用:

futaさんの書き込み (2007-03-27 13:19) より:
フォームのActiveControlが変わった(フォーム上のコントロール1のフォーカスがコントロール2に移動した)ときにフォーム側で発生するイベントがあったらどなたか教えていただけますでしょうか。



試してないので、ダメかもしれませんが、
ActiveControlプロパティをオーバーライドして、
ActiveControlに値が設定される瞬間を押さえるとかどうでしょう。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-03-27 14:15
引用:

GotFocus イベント...?



ヘルプにEnterイベント使えって書いてありますね_| ̄|○
ご指摘ありがとうございます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-27 14:29
引用:

よねKENさんの書き込み (2007-03-27 14:13) より:

試してないので、ダメかもしれませんが、
ActiveControlプロパティをオーバーライドして、
ActiveControlに値が設定される瞬間を押さえるとかどうでしょう。


どのようにオーバーライド致しましょうか? (^^)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-03-27 15:27
引用:

じゃんぬねっとさんの書き込み (2007-03-27 14:29) より:
引用:

よねKENさんの書き込み (2007-03-27 14:13) より:

試してないので、ダメかもしれませんが、
ActiveControlプロパティをオーバーライドして、
ActiveControlに値が設定される瞬間を押さえるとかどうでしょう。


どのようにオーバーライド致しましょうか? (^^)



今、速攻で試してみました。ダメでしたorz
ヘルプは確認したのですが、見方を間違ってました。
#VBの宣言で「NotOverridable」がないからいけるかな?と・・・<間違い

失礼いたしました。




http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.containercontrol.activecontrol(VS.80).aspx

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