残念ながら、これは、Delphi XE 以降に存在する Delphi whis の問題の 1 つであり、古いバージョンからではなく、まだ修正されていません。
コードが自動的に展開される理由は、エラー インサイト システムがユニット内の構文エラーを検出するとすぐに、そのポイントより下のすべてのコードを無効として扱い、そのポイントより下のすべての折りたたまれたコードを展開するためです。
これを回避する唯一の方法は、エラー インサイトを無効にすることです。ただし、これは、プログラムをコンパイルしようとするまで、潜在的な構文エラーについて警告されないことを意味します。
しかし、Embarcadero がすぐにこれを修正してくれることを切に願っています。エラー インサイトを無効にしない限り、コード フォールディング システム全体が役に立たなくなるからです。新しいコードを書くよりも、自動展開されたコードを再度フォールディングすることに時間を費やす必要があります。
編集:これを再現する手順(再現する1つの方法)
新しいアプリケーションを作成
フォームの OnCreate と OnClose の 2 つの新しいイベント ハンドラー、または他の 2 つのメソッドを作成します。
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//
end;
偶数ハンドラーを作成した場合は、オプティマイザーが「空の」イベントハンドラーを自動的に削除しないように、最低のハンドラーメソッドまたは少なくとも 1 つのコメント行に少なくともいくつかのコードがあることを確認してください。
上部のイベント ハンドラに「フォーム」と記述します。下部のイベント ハンドラーがどのように自動的に展開されるかがわかります。
この時点で、delphi desent は、構文エラーが検出された現在のメソッド コード ブロックがいつ、どこで終了するかを知っていることがわかります。また、これにより、そのポイントより下のコード ブロックを適切に検出することができなくなります。