Visual Studio 2005(c#)でフォームを開くと、デザイナーは、デザイナーにまったく触れずに、フォームのサイズを自動的に変更し、コントロールを移動/サイズ変更します。ソースファイルが変更され、デザイナを閉じると、*。csファイルを保存するように求められます。Visual Studioのオプションを調べようとしましたが、成功しませんでした。何か案は?Visual Studioのセットアップか何か?ありがとう、タル
10 に答える
私は今日のほとんどの間この問題に取り組んできましたが、いくつかの興味深いことがわかりました。問題の主な原因はアンカーに依存しているようです。アンカーの代わりにドッキングを使用してコントロールを配置すると、問題が解決したように見えます。2003(!)からいくつかのブログ投稿を見つけました。これは、アンカーの代わりにドッキングを使用する方法を詳しく説明し、アンカーがWindowsフォームデザイナーを壊す可能性があることを説明しています。この問題は7年以上前のもののようです。
投稿は次のとおりです。
これはAutoScaleMode
-propertyによるものです。フォームは、Windowsの表示設定とは異なるDPIまたはフォント設定で設計されている可能性があります。-プロパティには、、、、またはの4つのAutoScaleMode
異なる値があります。またはモードでは、フォームとコントロールはWindowsの表示設定に応じて自動的にサイズ変更されます。Dpi
Font
Inherit
None
Dpi
Font
したがって、すべてのフォームとコントロールでAutoScaleMode
-propertyをNone
に設定すると、それらは自動的にサイズ変更されなくなります。テキストサイズが125%に設定されている場合でもテキストが収まるように、すべてのコントロールに十分なスペースを確保するようにフォームを設計してください。
回避策を見つけました。
背後で何が起こっているのかわかりませんが、表示プロパティを変更しました。そしてそれはうまくいきます。シーケンスは次のとおりです。プロパティの表示->設定タブ->詳細。アドバンスダイアログで、「DPI設定」を大(120dpi)から通常(96dpi)に変更しました
複雑なTabControls内で上下左右に固定されたコントロールでも同じ問題が発生しました。Visual Studioのフォームデザイナーは、フォームを開くたびに、ネストされたすべてのコントロールの幅を広げていました。
この投稿のおかげで、簡単な回避策を見つけました。各タブにパネルを追加し、ドックプロパティを塗りつぶすように設定するだけです。タブ内の既存のすべてのコントロールは、それらのパネル内に移動されました。これは、コントロールが上下左右に固定されている場合でも機能します。
少なくともVisualStudio2013および2015で機能します。
これはあなたが一緒に暮らすべきものです。VS2008でも、そのようなことが時々起こります。これは主にフォームの内容(コントロール、位置など)に依存し、VSにはそのような動作を無効にするオプションはありません。
デザイナでフォームを開くと、vsruntimeはコードビハインドから視覚的な外観を再構築します。そして時々それはこの瞬間に変更を加えました。また、フォームに1つのコントロールを追加するだけの場合、Designerは分離コードファイルとリソースファイルを完全に再構築します。これはよく知られている問題であり、MSはWPF方向に移動するため、修正されないようです。
だからあなたの人生を簡素化するためのいくつかのポイント:
- VS2008に移行すると、デザイナーの一貫性は向上しましたが、.designer.csファイルのコントロールをシャッフルします。
- コードをソースリポジトリの1つに配置して、そのようなフォームを誤って保存した場合に、リポジトリから復元できるようにします。
フォームの最小サイズと最大サイズの設定を現在のサイズに設定することは、私にとって良い回避策でした。これにより、VSはサイズを変更できませんでした。
コントロールがほとんどない簡単なフォームがあり、VS2013デザイナーでフォームを開くとすぐに、下部の[OK]と[キャンセル]が上にシフトしていました。同じ動作がVS2015でも観察されました。
ここで受け入れられたDPIの回答では、問題は解決しませんでした。また、フォーム/パディング/マージンのサイズにも問題はありませんでした。
シフトされたコントロールを削除してフォームに戻すと、ptuttが提案するように、問題が解決しました。VisualStudio デザイナーがコントロールを移動し、フォームを開いたときにグリッド列を追加する
ryantumの提案と[パネル付き]ドッキングの使用に関するリンクに感謝しますが、上記のリンクでRolandのブログ投稿https://weblogs.asp.net/rweigelt/28984でも参照されているように、非常に些細なことをしたいと思います。削除/追加し直してください。
フォーマットメニューからコントロールをロックすることは、シンプルで効果的な解決策であることがわかりました。VS2013
VS 2015でこの問題が発生しました。子供として予期せず移動したコントロールを備えた、ドックパネルを使用しました。デフォルトでは、コントロールは左に配置されますが、向きを変更できます。ボタンが動かなくなった。
私もこの問題を抱えていました。デザイナーを開くたびに、アンカーが「右」になっているすべてのボックスが約20ピクセル左に移動しました。さらに、アンカーが「左」にあるすべてのボックスの下部は、フォームの外側に約200ピクセルありました。
このフォームには多くのコントロールがあり、小さいディスプレイでは縮小しないはずなので、自動スクロールに設定されました。フォーム自体は、表示されている最小サイズよりもデザイナーで小さかったです(歴史的に...)。サイズを最小サイズに設定しただけで、デザイナーにスクロールバーが表示されず、位置を台無しにすることなくアンカーが期待どおりに機能しました。
ryantmの回答から最初の投稿を読んで、解決策にたどり着きました。どうやらそれは.Netがフォームのサイズの設定などのイベントを実行する順序と関係があります。