form.onResize initializeComponent()中にトリガー
-
19-09-2019 - |
質問
XP English MachineとXP Japanay Machineで同じUIコードを実行しています。何らかの理由で、動作はこれら2つのマシン間で異なります。
日本のマシンでは、Onresizeイベントが初期化のコンポーネント呼び出し中にトリガーされています(Resumelayout関数から)。英語のマシンではそうではありません。
私が定義した私的変数の値を変更することを延期するオーバーライド方法があります。コンポーネントが完全にロードされていないため(CTORはまだ実行されています)、これらの変数はnullであり、例外が得られます。
変数がnullかどうかを確認してコードを修正できますが、なぜそれがそもそも呼び出されているのか、なぜこのマシンで発生するのかを理解したいと思います。
ネット上での検索中に、他の誰かが投稿したのと同じ問題が発見されましたが、解決策はありませんでした(http://social.msdn.microsoft.com/forums/en/winforms/thread/95aefae4-45d8-4ac5-a8f2-6e2142dfb631).
解決
適切な開示: 私はHilaと協力しているので、コードを見ることができました。異なる動作の理由は、AutoscaleModeと呼ばれるコントロールのAプロパティによるものでした。コントロールの基本クラスでは、このプロパティの値はautoscalemode.fontでした。すべてのR&Dマシンは同じ設定(英語)で実行されているため、適切に動作し、バグはそこで発生しませんでした。日本のマシンに変更すると、英語のマシンとは異なるフォント設定がありました。これはトラブルを引き起こしました。そのため、AutoscaleModeプロパティの価値をNONEに変更し、問題を解決しました。 結論: :AutoscaleModeプロパティに注意してください。