すごく困っています..
Edit1、2をForm1に貼り付けて、
Edit1にFocusがあるときに、リターンキを押すことによって、Edit2にFocusを移動させるために、下のようなプロがラムを書きました。
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_RETURN then
Form1.ActiveControl:=Edit2;
end;
end.
このプログラムを実行させて、
Edit1にFocusがあるときに、リターンキを押しても
Focusが移動しないのですが
別の、Projectでまったく同じプログラムを書いて、実行すると、
うまく、Focusが移動するのですが、不思議で仕方ありません。。
どなたか教えていただけませんか??
コードがまったく同じで、動きが違うのであれば、
コード以外になにか違いがあるのではないでしょうか?
詳しく言うと、
ファイルに保存してある、あるprojectを呼び出して
そのプログラムに、Focusが移動するように、上のプログラムを追加すると
うまくいかないのですが
ほかの、Projectに上のコードを書くとうまくいくにですが
プロパティなどの設定を変えたためなのでしょうか??
Form1.ActiveControl:=Edit2;
↑これを↓これにすればどうでしょう?
Edit2.SetFocus;
それは、試してみたのですが、
Form1.ActiveControl:=Edit2;
と、同じようの結果になりました。
Form1.KeyPreview = Trueで何かしてしまっているとか
OnKeyDown イベントはリターンキーを押した場合にこのコードを実行しているのか
確認してみては。
IDE上で if Key=VK_RETURN then 行をブレイクポイントに設定(F5)後
実行してみると良いです。
コードを実行しているとして、その後別なイベントが発生してフォーカス移動を
無効にしているような気もしますが。
やはりブレークポイントを設けるか、ShowMessageで指定位置まで来ているかチェックする必要がありそうですね。
わたしも多分指定位置の処理に来ていないと思います。
オブジェクト インスペクタのOnKeyDounとの関連付けは確実ですか、
よく私は、コピーぺタで作成するとイベントの関連付けが出来てなく
よく悩まされます。
回答ではなく、質問で申し訳ないのですが。
理恵さんは書かれました。
「詳しく言うと、
ファイルに保存してある、あるprojectを呼び出して
そのプログラムに、Focusが移動するように、上のプログラムを追加すると
うまくいかないのですが」
この文の意味を次のように理解しましたが、正しいでしょうか?
① Edit1は、project1=project1.exe にある。
② Edit2は、project2=project2.exe にある。そのEdit2へフォーカスを移したい。
「ほかの、Projectに上のコードを書くとうまくいくのですが」
ここでいう「ほかのProject」とは、project2のことでしょうか。
それともproject3があるのでしょうか。
的外れな質問だったらごめんなさい。
もう解決されたかもしれませんが、メニューやアクション項目のShortCutにEnterを設定していませんか?
メニューやアクション項目のShortCutは、OnKeyDownより優先するようです。
ツイート | ![]() |