2

デザイナー ビューでフォームを開くと、VS 2010 がフォームの designer.cs ファイルを更新しているようです。

たとえば、System.Windows.Forms.Label 型のラベルを持つフォームがあり、デザイナー ファイルが (自動生成されたコード) を持つようにラベルを作成したとします。

this.myLabel.AutoSize = true;
this.myLabel.Font = new System.Drawing.Font("Tahoma", 8.25F,
System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.myLabel.Location = new System.Drawing.Point(**25, 63**);
this.myLabel.Name = "myLabel";
this.myLabel.Size = new System.Drawing.Size(**101, 13**);
this.myLabel.TabIndex = 1;
this.myLabel.Text = "A simple windows label.";

デザイナー ビューを閉じて再度開くと、VS 2010 によって次のように変更されることがあります。

this.myLabel.AutoSize = true;
this.myLabel.Font = new System.Drawing.Font("Tahoma", 8.25F,
System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.myLabel.Location = new System.Drawing.Point(**29, 78**);
this.myLabel.Name = "myLabel";
this.myLabel.Size = new System.Drawing.Size(**124, 17**);
this.myLabel.TabIndex = 1;
this.myLabel.Text = "A simple windows label.";

ファイルを開く以外に何もしていないとき。

なぜこれが起こっているのか誰にも分かりますか?他の誰かがこのようなことを経験しましたか?

4

1 に答える 1

5

機能であり、バグではありません。このフォームはもともと、ビデオ アダプタのドット/インチ設定が 96 のマシンで設計されました。マシンの DPI は 120 と異なります。最新バージョンの Windows では非常に簡単に変更できるため、125% (中) の設定を選択しました。コントロールパネル+ディスプレイで。

異なる dpi 設定は、使用するフォントのサイズに影響します。コード スニペットに 1 つ表示されています。これは 8.25 ポイントです。1 ポイントは 1/72 インチです。したがって、テキストはもともと 8.25 * 1/72 = 0.114583 インチの高さでした。dpi が 96 の場合、0.114583 x 96 = 11 ピクセルになります。これが、ポイント サイズに余分な 0.25 を追加した理由を説明していることに注意してください。

しかし、dpi が 120 になったので、テキストは 8.25 x 1/72 x 120 = 14 ピクセルになります。テキストが大きくなりました。コントロールも大きくする必要があります。そうしないと、テキストがクリップされ、ディセンダーが切り取られます。

これは、フォームをロードしたときに自動的に行われました。重要なプロパティは AutoScaleMode で、デフォルトで Font に設定されています。AutoScaleDimensions は、InitializeComponent() メソッドの先頭に割り当てられています。これは、元の DPI 設定が何であったかを記憶しているものです。

これは、ユーザーのマシンでも発生します。フォームが適切に自動スケーリングされていることを確認してください。フォント サイズが異なるコントロールがあると、問題が発生する可能性があります。そして、フォームをソース管理に戻すだけで、この再スケーリングが再び発生することはありません。

于 2013-03-21T22:44:00.773 に答える