これは、私が最近プログラムを書いているときに遭遇した問題です。もしあなたも Visual Studio で開発していて、同じような問題、つまり「VS 上でのインターフェースデザイン」と「実行したときの結果」が一致しない問題に出会っているのであれば、私の解決方法をご覧ください。少し単純ですが、とても効果的ですXD
問題の内容:
Visual Studio でプログラムを開発し、コンパイルしてから実行したところ、実行結果が Visual Studio 上で配置したインターフェースとまったく違っていました。しかし、私のコードには、インターフェースに影響するようなものは何もありませんでした。
解決方法:
この問題は、Form の Language プロパティを変更したときに起こることがあります。ソリューションエクスプローラーを開き、「Form1.zh-Hant.resx」のようなローカライズファイルがあるかどうかを確認してください。そのファイルを削除してから、もう一度リビルドしてください。理論上は、これで解決するはずです。次の操作をしたかもしれません:
1.Form の Language を繁体字中国語に設定する
2.コントロールを少し動かす
3.Form の Language を既定値に戻す
4.もう一度コントロールを動かしてからコンパイルすると、結果が違ってきます XD
原因:
最初は、とても不思議なバグだと思っていました。その後、Bill さんが仕組みを教えてくれて、ようやくバグではないのだと分かりました。整理してみます…
先ほどの、問題が起きた手順は次のとおりです:
1.Form の Language を繁体字中国語に設定する
2.コントロールを少し動かす
3.Form の Language を既定値に戻す
4.もう一度コントロールを動かしてからコンパイルすると、結果が違ってきます XD
2番目の操作の時点で、ローカライズファイル Form1.zh-Hant.resx が生成されます。
この時点では、まだすべて正常です。
しかし、3番目の手順で Language を既定値に戻すと、Visual Studio のデザイナーは元のコードのレイアウトを表示します。一方、コンパイル時には「Form1.zh-Hant.resx」も一緒にビルドされてしまいます。私のパソコンはたまたま繁体字中国語に設定されていたため、ここで問題が起きました。プログラムは実行時に OS の言語を確認し、対応するローカライズファイルを適用します。ところが、そのファイルにはコントロールの位置も含まれているため、実行時にはローカライズファイルのコントロール位置が使われ、デザイン時には元のコードの位置が使われるので、デザインと実行結果がずれてしまいます。