Можете ли вы изменить генерацию кода VS Win Forms designer?
мы внедрили новые стандарты кодирования, которые требуют, чтобы наши частные члены имели ведущее подчеркивание. Вот так:
private System.Windows.Forms.Label _label;
к сожалению, VS выведет значение по умолчанию ниже, когда вы перетащите новую метку в свою форму:
private System.Windows.Forms.Label label1;
есть ли способ изменить значение по умолчанию на:
private System.Windows.Forms.Label _label1;
Это относится ко всем элементам управления, а не только к меткам, и да, они должны использоваться из кода.
спасибо,
Пламен
7 ответов
помимо создания собственного VS надстройки, которая следит за сгенерированным кодом и автоматически переименовывает его, нет никакого способа выполнить то, что вы хотите.
лично я считаю, что автоматический сгенерированный код должен быть исключен из любых руководящих принципов кодирования и так далее. В большинстве сценариев их можно игнорировать, если только в генераторе нет ошибки.
пожалуйста, обсудите с тем, кто написал это руководство по кодированию и спросите его.ее исключить сгенерированный код.
Я знаю, что это старый вопрос, но в последнее время я работаю с дизайнерами, и у меня есть решение для того, что вы хотите. Добавьте этот класс в проект:
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);
}
}
}
}
}
а затем измените базовый класс формы с формы на BaseForm:
using System;
namespace WindowsFormsApplication1
{
public partial class Form1 : BaseForm
{
public Form1()
{
InitializeComponent();
}
}
}
закройте все конструкторы форм перед перекомпиляцией проекта, а затем снова откройте его и попробуйте добавить элемент управления, его имя начнется с подчеркивания.
Я не думаю,что вы можете заставить дизайнера Visual Studio автоматически добавлять подчеркивание. Однако вы можете сделать процесс добавления подчеркивания менее болезненным. Сначала создайте объекты без подчеркивания, а затем переименуйте их с помощью функции рефакторинга. Просто наведите курсор на название поля (label1
, в вашем случае) и нажмите F2 (или щелкните правой кнопкой мыши ⇒ рефакторинг ⇒ переименовать). Этот работает независимо от того, где в коде вы находитесь, все что вам нужно-это упоминание о label1
. Поскольку вы, вероятно, будете писать код, который использует ваши элементы управления, вы, вероятно, будете ссылаться на поля в любом случае. Вы также можете нажать F12, чтобы перейти прямо к объявлениям, где вы фактически получите полный список всех ваших элементов управления; вы можете легко использовать F2 для переименования многих из них на одном дыхании.
кстати, я также использую F2 для переименования большинства автоматически сгенерированных имен обработчиков событий. Например, я ненавижу чтобы увидеть имена методов, такие как btnZoomIn_Click()
. Я предпочитаю называть метод zoomIn()
потому что это то, что он делает. Вместо Mainform_KeyPress()
Я мог бы назвать это processKeyPress()
.
можно задать для параметра GenerateMember значение false.
Это не решает вашу проблему, но избегайте неправильного именования, когда вы не работаете с управлением вручную.
Resharper может применять соглашения об именах. Тогда остается только открыть .конструктор файлов и нажав alt + enter, введите несколько раз.
Как сказал BlueRaja, вы можете использовать Resharper. Затем вы можете использовать его очистку кода (Ctrl-E, C), однако это не работает с сгенерированными файлами, поэтому вам придется временно переименовать его. Я не на работе, поэтому я не могу проверить, есть ли возможность включить опцию для сгенерированных файлов где-нибудь.
обратите внимание, что вам придется перезапускать это каждый раз, когда файл восстанавливается.