これは、ESRI MapControls を Access データベース フォームに埋め込むことに関連しています。
フロントエンドとバックエンドに分割された 2 つのアクセス ファイルがあります。私のバックエンドは、ArcGIS が埋め込み ESRI マップ コントロールからの表示用のフィーチャクラスを格納するために使用する PersonalGeoDatabase でもあります。
フィーチャ クラスには、特定の ProjectID に関連付けられたポリライン、ポイント、およびポリゴンが格納されます。
フロントエンドからは、バックエンドに関連付けられた MXD ファイルをロードする埋め込み mapControl があります。
私は CenterPoint という VB 関数を持っています。これは偶然にも、プロジェクトに関連付けられたフィーチャクラス (存在する場合) を中心にマップ エンベロープを配置し、目的の表示範囲を設定します。プロジェクトのフィーチャクラスがまだ存在しない場合は、すべてのプロジェクトが含まれる地域全体をマップの中心にして、全体像を示します。
それで、それがすべて理にかなっていて、私があなたを失っていないなら...
Form_Current イベントで最初に CenterPoint サブルーチンを呼び出しました。これは、必要なすべての機能を実行するという点で機能しました。ただし、CenterPoint 関数の実行中はフォームが応答せず、再描画が完了するまで別のレコードに変更できませんでした。つまり、10 レコードをジャンプしたい場合は、1 レコードをジャンプし、再描画を待ち、別のレコードをジャンプし、再描画を待つ必要があります。MXD 画像を最適化し、再描画を大幅に高速化しました。レイヤーがありましたが、それでも受け入れられませんでした。
次に、次のコマンドを実行して、CenterPoint サブルーチンを呼び出す前に、数秒の遅延を確立しようとしました。
Private Sub Form_Current()
Dim s_Start As single
Dim s_Delay As single
s_Start = Timer
Do While Timer < s_Start + s_Delay
DoEvents
Loop
CenterPoint
End Sub
つまり、最初に再描画を試みる前に複数のレコードをクリックできます。
残念ながら、すべての Form_Current 呼び出しがキャッシュされているようです。たとえば、3 つのレコードをスキップし、遅延が終了するのを待って画面を見ると、再描画 (つまり、CenterPoint の実行) が 3 回連続して行われます。
さらに奇妙なことに、散発的に行のゼロ除算エラーが発生します。
Do While Timer < s_Start + s_Delay
ラインに分割がないにもかかわらず。
だから、私の質問は次のとおりだと思います:
- form_current 呼び出しを 1 回だけ実行する方法はありますか?
- そうでない場合、CenterPoint 関数を呼び出す前に、特定の時間、ユーザーが現在のレコードにとどまっていることを確認する方法はありますか?
- ゼロ未満の比較をゼロ除算エラーから隔離する方法はありますか?少なくとも、複数回再描画されても、ユーザーはレコードをすばやく連続してクリックできますか?
現在、私の回避策は、CenterPoint サブをフォーム上のボタンのクリック イベントとして配置することでした。これは機能しますが、理想的ではありません。
意味が分からない場合や、さらに情報が必要な場合は、お知らせください。
ありがとう、スペンサー