フォーカスが一つ前のコントロールを取得するには

解決


  2005-06-10 22:43:09  No: 15512

お世話になっております。
フォーカスがひとつ前のコントロールを取得する方法はありますか。
タブ順での取得はできそうなのですが、マウスクリックにより、
タブ順でないフォーカス移動が発生した場合の移動前のコントロールを取得したいと考えています。
現在はENTER、EXITイベントでコントロール名を保持する方法で行っていますが、いまいちスマートではありません。^^
どなたかご存知の方が居られましたらよろしくお願いいたします。


ん?  2005-06-10 23:42:42  No: 15513

TScreen.OnActiveControlChange


ん?  2005-06-10 23:43:38  No: 15514

TScreen.OnActiveFormChange

こっちも使うかな?


  2005-06-11 00:23:31  No: 15515

返信ありがとうございます。
ん!さんに説明いただいたのは、Enter、ExitではなくOnActiveControlChangeで
フォーカスが移る度に、コントロール名を保持する方法と解釈してよろしいでしょうか。

だとすると、少し説明不足でした、再度質問させてください。
今考えているのは、マスタ参照が発生するEditが3つあるとし、
参照用のボタンが1つあるとします。
エディットにフォーカスがあるときに、参照用ボタンをクリックすると、フォーカスが参照ボタンに移ってしまいます。
この場合、どのエディットで参照ボタンが押されたか知りたいと考えています。
方法としては、Enter、Exit、ん!さんに説明いただいた、ActiveControlChangeで変数にコントロール名を設定する方法は
考え付いたのですが、コントロール名を保持せずに前にフォーカスがあったコントロールを取得する方法はないものかと質問させていただきました。
以上よろしくお願いいたします。(ないかな...^^)


ななし  2005-06-11 02:10:49  No: 15516

> どのエディットで参照ボタンが押されたか
参照ボタンのOnClickイベントのSender


ななし  2005-06-11 02:11:37  No: 15517

あ、ごめんなさい。参照ボタンは1つなんですね。


ん?  2005-06-11 02:23:08  No: 15518

ん〜、ないでしょう。

TScreenは、FLastActiveControlという、直前にフォーカスがあったコントロールを保持する変数を持っていますが、OnActiveControlChangeイベントを発生されるかさせないかの判定程度にしか使っていません。
したがって参照不可。

Screen.ActiveControl is TEdit = True のとき、
直前のEdit として保存しておくのがよろしいかと。
また、コントロール名じゃなくTWinControl型の変数を使う。
Edit限定なら、TEdit型の変数にして、キャストして代入してしまうと楽かな。


929の策  2005-06-11 07:22:56  No: 15519

参照ボタンをTSpeedButtonにしたら?


ん?  2005-06-11 07:59:44  No: 15520

>参照ボタンをTSpeedButtonにしたら?
イイ!
TSpeedButtonには、フォーカスが移動しないから、Editにフォーカスを残したままボタンを押すことができる。
目からウロコなアイディアです。


  2005-06-13 21:41:18  No: 15521

返事が遅くなってしまいました。
スピードボタンとは...なかなか私も目からうろこでした。
しかしフォーカスが移らないのも問題なので、(なんだか矛盾してますが^^)
やはり直前のコントロールを保持しておく方法でいこうと思います。
みなさんには返信ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加