いくつかの TEdit が配置されている TFrame があります。これらの編集はシリアル キー入力用のボックスです。それぞれに一定量の文字が入力されると、ある編集ボックスから次の編集ボックスに入力フォーカスがジャンプするユーザー エクスペリエンスをセットアップしようとしているからです。つまり、ユーザーは先に進むためにタブを押したり、次の編集をクリックする必要はありません。
C++ Builder のハウツー本 (素晴らしい本) で、入力プレスを「シミュレート」して、編集でタブを押したように動作させる方法の例を見つけ、同じ手法を採用しようとしていました。ただし、私のアプリの何かがその例のように機能しません。
フレームの KeyPress イベントには、コードがあります
void __fastcall TAboutFrame::Edit1KeyPress(TObject *Sender,
System::WideChar &Key)
{
TEdit* theEdit = dynamic_cast<TEdit*>(Sender);
if(!theEdit)
{
return;
}
if(theEdit->Text.Length() >= 6)
{
//jump to next edit
Perform(WM_NEXTDLGCTL, 0, 0);
...
ただし、次のコントロールへの「ジャンプ」は発生しません。
フレームの親であるメイン フォームには key preview == true があり、ブレークポイントを設定して、Perform 呼び出しが実際に実行されたことを確認できます。
編集のタブ オーダーは 1、2、3、4、5 です。
これは TFrames メッセージングと関係があるのだろうか?