8

私たちは新しいコーディング標準を実装しました。この標準では、プライベート メンバーの先頭にアンダースコアを付ける必要があります。そのようです:

private System.Windows.Forms.Label _label;

残念ながら、新しいラベルをフォームにドラッグすると、VS は以下のデフォルトを表示します。

private System.Windows.Forms.Label label1;

デフォルトを次のように変更する方法はありますか:

private System.Windows.Forms.Label _label1;

これは、ラベルだけでなく、すべてのコントロールに関係します。はい、それらはコードから使用されます。

乾杯、

プラメン

4

7 に答える 7

11

個人的には、自動生成されたコードはコーディング ガイドラインなどから除外する必要があると考えています。ジェネレーターにバグがない限り、ほとんどのシナリオでそれらを無視しても安全です。

そのコーディング ガイドラインを書いた人と議論し、生成されたコードを除外するよう依頼してください。

于 2010-04-13T06:47:01.573 に答える
3

古い質問だと思いますが、私は最近カスタム デザイナーと仕事をしており、あなたが望むものに対する解決策があります。このクラスをプロジェクトに追加します。

using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace WindowsFormsApplication1
{
    [Designer(typeof(BaseFormDesigner), typeof(IRootDesigner))]
    public class BaseForm : Form
    {
        public BaseForm()
        {
        }
    }

    public class BaseFormDesigner : DocumentDesigner
    {
        public override void Initialize(IComponent component)
        {
            base.Initialize(component);
            var service = GetService(typeof(IComponentChangeService)) as IComponentChangeService;
            service.ComponentAdded += service_ComponentAdded;
        }

        private void service_ComponentAdded(object sender, ComponentEventArgs e)
        {
            if (e.Component is Control && !(e.Component is Form)) {
                var control = (Control)e.Component;
                if (!control.Name.StartsWith("_")) {
                    var service = GetService(typeof(IComponentChangeService)) as IComponentChangeService;
                    PropertyDescriptor desc = TypeDescriptor.GetProperties(control)["Name"];
                    service.OnComponentChanging(e.Component, desc);
                    string oldValue = control.Name;
                    string newValue = "_" + oldValue;
                    desc.SetValue(control, newValue);
                    service.OnComponentChanged(e.Component, desc, oldValue, newValue);
                }
            }
        }
    }
}

次に、基本フォーム クラスを Form から BaseForm に変更します。

using System;

namespace WindowsFormsApplication1
{
    public partial class Form1 : BaseForm
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

プロジェクトを再コンパイルする前にすべてのフォーム デザイナーを閉じてから、もう一度開き、コントロールを追加してみてください。その名前はアンダースコアで始まります。

于 2015-12-17T07:33:53.297 に答える
3

生成されたコードを監視して自動的に名前を変更する独自の VS アドインを作成する以外に、目的を達成する方法はありません。

于 2010-04-19T13:32:24.117 に答える
1

この答えは不十分かもしれませんが、私が提供できる最高のものです。

Visual Studio Designer にアンダースコアを自動的に追加させることはできないと思います。ただし、できることは、アンダースコアを追加するプロセスの負担を軽減することです。最初にアンダースコアなしでオブジェクトを作成するだけです。次に、リファクタリング機能を使用して名前を変更します。フィールドの名前 (この場合は ) にカーソルを置き、label1F2 を押します (または、右クリック ⇒ リファクタリング ⇒ 名前の変更)。これは、コードのどこにいても機能します。必要なのはlabel1. おそらくコントロールを使用するコードを書くことになるので、フィールドを参照することになるでしょう。F12 を押して、すべてのコントロールの完全なリストを効果的に取得する宣言に直接移動することもできます。F2 を使用して、一度に多数の名前を簡単に変更できます。

ちなみに、私は F2 を使用して、自動生成されたイベント ハンドラーの名前のほとんどを変更しています。たとえば、私は のようなメソッド名を見るのが嫌いbtnZoomIn_Click()です。私はメソッドを呼び出すことを好みzoomIn()ます。代わりにMainform_KeyPress()私はそれを呼ぶかもしれませんprocessKeyPress()

于 2010-04-09T13:38:08.293 に答える
0

Resharperは命名規則を適用できます。次に、.designerファイルを開き、Alt + Enterキーを押して、数回入力するだけです。

于 2010-04-13T04:08:35.240 に答える
0

BlueRaja が言ったように、Resharper を使用できます。その後、コードのクリーンアップ (Ctrl-E、C) を使用できますが、これは生成されたファイルでは機能しないため、一時的に名前を変更する必要があります。私は仕事をしていないので、生成されたファイルのオプションを有効にするオプションがどこかにあるかどうかを確認できません。

ファイルが再生成されるたびに、これを再実行する必要があることに注意してください。

于 2010-04-16T18:01:54.840 に答える
0

GenerateMember を false に設定できます。
これで問題は解決しませんが、コントロールを手動で操作しない場合は、間違った名前を付けないようにしてください。

于 2010-04-13T00:57:14.750 に答える