Можете ли вы изменить генерацию кода VS Win Forms дизайнер? - PullRequest
8 голосов
/ 08 апреля 2010

Мы внедрили новые стандарты кодирования, которые требуют, чтобы наши частные члены имели основной знак подчеркивания. Вот так:

private System.Windows.Forms.Label _label;

К сожалению, VS перенаправит значение по умолчанию ниже, когда вы перетаскиваете новый ярлык на форму:

private System.Windows.Forms.Label label1;

Есть ли способ изменить значение по умолчанию:

private System.Windows.Forms.Label _label1;

Это относится ко всем элементам управления, а не только к меткам, и да, они должны использоваться из кода.

Приветствия

Пламен

Ответы [ 7 ]

11 голосов
/ 13 апреля 2010

Лично я считаю, что автоматически генерируемый код должен быть исключен из любых правил кодирования и так далее. Можно игнорировать их в большинстве сценариев, если только в генераторе нет ошибки.

Пожалуйста, обсудите это с тем, кто написал это руководство по кодированию, и попросите его исключить сгенерированный код.

3 голосов
/ 19 апреля 2010

Помимо создания собственной надстройки VS, которая следит за сгенерированным кодом и автоматически переименовывает его, невозможно достичь желаемого.

2 голосов
/ 17 декабря 2015

Я знаю, что это старый вопрос, но в последнее время я работаю с дизайнерами, и у меня есть решение для того, что вы хотите. Добавьте этот класс к вашему проекту:

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();
        }
    }
}

Закройте все дизайнеры форм, прежде чем перекомпилировать проект, а затем снова откройте его и попробуйте добавить элемент управления, его имя будет начинаться с подчеркивания.

1 голос
/ 09 апреля 2010

Этот ответ может быть неудовлетворительным, но это лучшее, что я могу предложить.

Не думаю, что вы можете заставить Visual Studio Designer автоматически добавлять подчеркивание. Тем не менее, вы можете сделать процесс добавления подчеркивания менее болезненным. Просто создайте свои объекты без подчеркивания; затем используйте функцию Refactor, чтобы переименовать их. Просто наведите курсор на имя поля (label1, в вашем случае) и нажмите F2 (или щелкните правой кнопкой мыши ⇒ Refactor ⇒ Rename). Это работает независимо от того, где в коде вы находитесь, все, что вам нужно, это упоминание label1. Поскольку вы, вероятно, будете писать код, который использует ваши элементы управления, вы все равно будете ссылаться на поля. Вы также можете нажать F12, чтобы перейти к декларациям, где вы фактически получите полный список всех ваших элементов управления; Вы можете легко использовать F2, чтобы переименовать их там за один раз.

Кстати, я также использую F2 для переименования большинства автоматически генерируемых имен обработчиков событий. Например, я ненавижу видеть имена методов, такие как btnZoomIn_Click(). Я предпочитаю вызывать метод zoomIn(), потому что это то, что он делает. Вместо Mainform_KeyPress() я мог бы назвать это processKeyPress().

0 голосов
/ 16 апреля 2010

Как сказал BlueRaja, вы можете использовать Resharper. Затем вы можете использовать его Очистку кода (Ctrl-E, C), однако это не работает для сгенерированных файлов, поэтому вам придется временно переименовать его. Я не на работе, поэтому я не могу проверить, есть ли возможность включить опцию для сгенерированных файлов где-то.

Обратите внимание, что вам придется повторять это каждый раз, когда файл регенерируется.

0 голосов
/ 13 апреля 2010

Resharper может применять соглашения об именах. Тогда нужно просто открыть файл .designer и нажать несколько раз alt + enter, enter.

0 голосов
/ 13 апреля 2010

Вы можете установить для GenerateMember значение false.
Это не решит вашу проблему, но позволит избежать неправильного именования, когда вы не работаете с управлением вручную.

...