web-dev-qa-db-ja.com

私のWindowsフォームはビルド時に縮小/サイズ変更を続けます

私はWindowsフォームプロジェクトに取り組んでいます。複数のページとそれぞれに複数のコントロールがあるタブコントローラーが含まれています。

比較的最近、フォームが変更された後、ソリューションをビルドして実行するたびに、フォームのサイズが変更/縮小されるようです。

そのため、フォームの高さのサイズを768に設定した場合、[開始]をクリックしてビルドして実行すると、プロセス中にサイズが変更されているのを実際に垣間見ることができ、フォームは高さの値より21ピクセル短くなります。それはのために構築されていました。

その後、プロジェクトのビルドと実行を続けると、フォームは毎回21ピクセルずつ減少し、ビルドごとに小さくなります。

think 'DataGridView'コントローラーをタブの1つに追加したときに導入された可能性がありますが、それが当てはまるかどうかはまだ証明されていません。

これが起こる理由はありますか、そしてこれを何がしているのでしょうか?ビルドの実行時にサイズが変更されるのはなぜですか?

11
Simon

これは厄介なバグであり、私自身も同様の行動をとっています。ただし、いくつかの回避策があるかもしれませんが、注意が必要です。これらは、少しハッキーに聞こえるかもしれません。

解決策1

コントロールがドッキングされていない場合は、ドッキングが役立つ場合があります。

解決策2

DPI設定を変更して、問題を解消できる場合があります。

表示プロパティ設定タブ→詳細詳細ダイアログで、[DPI設定]を(120 dpi)から通常(96 dpi)に変更しました。

解決策3

これは、AutoScaleModeプロパティが原因である可能性があります。フォームは、現在Windowsの表示設定とは異なるDPIまたはフォント設定で設計されている可能性があります。フォームと問題のあるコントロールでAutoScaleMode-propertyをNoneに設定してみてください。そうすると、自動的にサイズが変更されなくなります。

6
Michael Randall

問題

どうやらVisualStudio2015にバグがあります。特定の状況が満たされたときにSizeを正しく計算していません。私の場合、私は以下を使用していました...

(Name):           Form1
AutoScaleMode:    Font
AutoSizeMode:     GrowOnly
DoubleBuffered:   True
Font:             Verdana, 8.25pt
FormBorderStyle:  FixedDialog
Icon:             (Icon)
MaximizeBox:      False
MinimizeBox:      False
MinimumSize:      600, 170
Size:             600, 170
StartPosition:    CenterParent
Text:             MyTitle

さて...このフォームを閉じて開いた場合、Sizeはまったく同じです(600、170)。次のプロパティを変更した場合...

ControlBox:       False

次に、フォームを閉じて再度開くと、Size(610、203)に変更されていることがわかります。

私の推測では、バグは2つのことを説明していないと思います。 1つは、フォームのタイトルバーの高さです。もう1つは、タイトルバーアイコンWIDTHです。これは、WIDTH of 10ピクセルとHEIGHT of 33ピクセルのオフセットになります。

ソリューション

実際には、3つの回避策があります。 1つは、MinimumSizeをオフセットすることです。もう1つは、実際にControlBoxを表示することです。最後の方法は、フォームの初期化後にControlBoxプロパティを設定して、コードの問題を修正することです。

オフセットMinimumSize :

したがって、最初のオプションは、MinimumSize(w:10、h:33)でオフセットすることです。したがって、たとえば、MinimumSize(600、170)にする場合は、(590、137)に設定する必要があります。それは実際にあなたが見ると期待するサイズを生み出すでしょう。

ControlBoxを表示

次のプロパティを変更するだけです...

ControlBox:       True

コードの問題を修正する:

設計時に次のプロパティを変更する必要があります...

ControlBox:       True

次に、フォームが初期化された後、ControlBoxプロパティをFalseに設定する必要があります。

public Form1()
{
    InitializeComponent();
    this.ControlBox = false;
}
4
Arvo Bowen
  1. フォームサイズの値をコピーします。
  2. [最小サイズ]プロパティと[最大サイズ]プロパティの両方に貼り付けます。
  3. 楽しい
2
zakir ullah

私も同じ問題を抱えていました。私の解決策:

私のPCのシステムはWindows10です。モニターの解像度は125%で、100%に設定しました。次に、フォームのサイズを変更せずに設定します。

この写真で解像度設定を見ることができます:

Resolution settings

トルコ語で「スケール」は「オルセクル」です。下部に解像度オプションがあります( "ölçeklevedüzenle")。

2

私はそれを考え出した!

"デザインビュー""プロパティ""MinimizeBox"のフォームをクリックして、変更すると"True"から"False"

1
Rody Davis

さて、最初にサルマンの提案した解決策に応えて。

  1. 値がドッキングされているアプリケーションのコントローラーはありません。かなりの数が錨泊していましたが、ドッキングしているようには見えませんでした。見つけたメインコンテナをいくつかドッキングしましたが、あまり違いはなかったようです。確かに、すべてのコントローラーをドッキングしたわけではありませんが、ソリューション2に移行しました...

  2. DPI設定の場所がわかりませんでした。 Visual Studioのどこか、または私のマシンのどこかにあります。そこで、提案されたソリューション3に移りました...

  3. フォームの初期化時に、「this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;」を追加しました。これにより、自動的に 'this.ClientSize = new System.Drawing.Size(11264,730)'メソッドの上に配置されたように見え、興味をそそられました。

    もう少しデバッグすると、アプリケーションがビルドされて初期化されるときに、「this.ClientSize」プロパティがすでに非常に低い、多かれ少なかれ「230x200」に設定されているように見えます。この値がどこから来ているのかはわかりませんが、最初のサイズ変更と関係があるのではないかと思います。その後、もう一度大きな値に設定しようとします...

とにかく、私はおそらく2倍にする別の提案に出くわしましたフォームの最小の幅と高さのプロパティを確認してくださいそしてそれらが0x0に設定されていることに気づきました、私はデフォルトで仮定しています。

そのため、最小値をフォームのサイズ値と同じに設定しました。その後のビルドでは、現在そのサイズを維持しているように見えます。または少なくとも、私が言えることからそれ以上縮小していません。

最小フォームサイズを設定することがこの奇妙な動作の許容可能な解決策であるかどうかはわかりませんが、これまでのところ、実行する各ビルドでアプリケーションサイズの一貫性を維持しているようです。これは、現時点では安心です。

ClientSizeプロパティについてさらに知識があり、初期の小さいサイズについて心配する権利がある場合は、それを聞いていただければ幸いです。 :)

1
Simon