14

最近、私たちが使用する多くのコントロールにいくつかの改善を加えています。たとえば、プロパティにデフォルト値を与えたり、ボタンを保護ではなく非公開にしたりしています。この種の調整を行うことにより、このコントロールを持つフォームまたはコントロールから継承するコントロールのデザイナー ファイルを再生成する必要があります。

以前は、20 ~ 30 のフォームしかなかったので、これは実際には問題ではありませんでした。現時点では 300 を超えるフォームがあり、これは VS2010 で同じ数のデザイナーを開くことを意味します。

私の質問: すべてのフォームが再生成されるように、このプロセスを自動化する方法を知っていますか?

デザイナー ファイルを探してファイルを開く (VS がクラッシュしないように最大 25 ~ 50 個のファイルを開く) マクロについて考えていましたが、これを機能させることができませんでした。

誰かに提案があることを願っています!

4

3 に答える 3

6

私が見つけた唯一の方法は、フォーム デザイナーを開き、コントロールを追加してから保存することです。これにより、デザイナー コードが再生成されます。次に、新しく追加されたコントロールを削除し、再度保存して閉じます。

通常、ツールボックスのボタンをダブルクリックしてボタンを追加します。これにより、ボタンが位置 0,0 に配置されます。

数か月前に、約 100 のフォームとユーザー コントロールを含むプロジェクトでこれを行いました。プロジェクト ファイルを再帰するマクロの代わりに、一時的なマクロを記録してから、各フォーム/ユーザー コントロールに対してマクロを実行し、結果を調べました。

リファクタリングと再フォーマットを混同しないでください。大きなフォームのデザイナー コードを最適化および/または変更することがよくあります。たとえば、コントロールをパネルに追加する順序や、パネルを他のパネルに追加する方法を変更します。やみくもにデザイナー コードを再生成するつもりはありません。

于 2012-01-05T09:53:51.240 に答える
2

また、この問題が発生しました( WinFormsに.designer.csファイルの再生成を強制するも参照してください)。

結局、削除したプロパティのほとんどは一意の名前であり、プロパティ名を含むデザイナーファイルから行を削除するシェルスクリプトを作成することができました。

これは、空白行を残すだけでなく、実際に行を削除することに注意してください。
Bashシェルから実行する必要があります。msysgitがインストールされている場合、そのシェルは問題ありません。
これでTextForeColorは、プロパティが削除されました。

#!/bin/bash
files=$(find . -type f -name '*.Designer.cs' -print0 | xargs -0 grep -l 'TextForeColor')
for file in $files
do
    echo $file
    sed '/TextForeColor/ d' $file >$file.tmp
    mv $file.tmp $file
done
于 2012-01-05T09:37:04.217 に答える
-3

300を超えるコントロールの変更を維持する代わりに、フォームの継承を採用します。

于 2012-01-05T09:25:22.670 に答える