0

いくつかの 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 メッセージングと関係があるのだろうか?

4

1 に答える 1

0

使用しているコントロールが TWinControl から派生している場合 (ストック VCL コントロールを使用している場合はそうすべきです)、TWinControl->SetFocus() を使用して、フォーカスを目的のコントロールに明示的に設定することもできます。

于 2014-12-12T23:19:46.120 に答える