Показаны сообщения с ярлыком Visual Studio. Показать все сообщения
Показаны сообщения с ярлыком Visual Studio. Показать все сообщения
четверг, 14 февраля 2013 г.
Mono в Visual Studio 2010
Оказывается, в Visual Studio 2010 при написании программ можно использовать Mono, вместо Framework .NET. Как это сделать написано тут.
среда, 14 ноября 2012 г.
Компоненты Visual Studio. Создание собственного редактора свойства
При написании своих собственных компонентов для Visual Studio часто возникает необходимость создать специальный редактор для свойств, значениями которых являются например объекты, неизвестный системе. Сделать свой собственный редактор свойства довольно просто.
Любой редактор свойства является классом унаследованным от UITypeEditor. Настройка поведения своего редактора свойства осуществляется путем переопределения предоставляемых этим классом виртуальных методов. UITypeEditor содержит следующие методы, предназначенные для переопределения:
1) GetEditStyle – для задания вида редактора. Например если нужно получить выпадающую форму для редактирования, нужно сделать так:
Но это еще не все. В приведенном выше коде в качестве типа редактируемого свойства используется класс (или структура) MyEditableType. Этот тип является пользовательским и компонентная модель ничего не знает о нем. Для того чтобы объяснить компонентной модели как обращаться с этим типом, для него необходимо задать атрибут TypeConverterAttribute. В качестве параметра этот атрибут принимает тип класса, унаследованного от TypeConverter.
Исходный код в котором вы сможете увидеть применение редакторов свойств на практике можно найти здесь.
Любой редактор свойства является классом унаследованным от UITypeEditor. Настройка поведения своего редактора свойства осуществляется путем переопределения предоставляемых этим классом виртуальных методов. UITypeEditor содержит следующие методы, предназначенные для переопределения:
- EditValue – этот метод вызывается при начале редактирования свойства, в нем должен вызываться редактор, в результате возвращает полученное от редактора значение;
- GetEditStyle – должен возвращать значение enum'а. Допускаются следующие значения:
- None – никакой кнопки выводиться не будет;
- Modal – кнопка в виде многоточия (типа "Обзор"), указывающая на то что при нажатии на нее откроется диалог для редактирования значения свойства:
- DropDown – кнопка в виде выпадающего списка, указывающая на то что при нажатии на нее появится небольшая формочка для редактирования:
- GetPaintValueSupported – указывает, нужно ли будет рисовать маленький прямоугольник, перед значением свойства
в PropertyGird'е:
- PaintValue – вызывается при необходимости перерисовки маленькой картинки перед значением свойства в PropertyGird'е.
1) GetEditStyle – для задания вида редактора. Например если нужно получить выпадающую форму для редактирования, нужно сделать так:
public override UITypeEditorEditStyle GetEditStyle(
ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
2) EditValue – для открытия редактора. Метод имеет следующую сигнатуру:
public Object EditValue( ITypeDescriptorContext context, IServiceProvider provider, object value)где
- context – не знаю для чего используется:-);
- provider – обеспечивает объект интерфейса IWindowsFormsEditorService (путем вызова метода GetService(typeof(IWindowsFormsEditorService))). Этот объект предоставляет методы для отображения (DropDownControl) и закрытия (CloseDropDown) всплывающей формы редактора и метод ShowDialog для отображения диалога редактора.
- value – текущее значение свойства.
public override object EditValue(ITypeDescriptorContext context,
IServiceProvider provider, object value)
{
IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)
provider.GetService(typeof(IWindowsFormsEditorService));
if (edSvc != null)
{
MyEditorControl control = new MyEditorControl();
control.Value = (MyEditableType)value;
edSvc.DropDownControl(control);
value = control.Value;
}
return value;
}
В коде можно увидеть использование неизвестного класса MyEditorControl. Этот класс и есть форма нашего редактора. Он является наследником класса UserControl (но может быть унаследован и от другого контрола).
Реализация класса MyEditorControl должна иметь примерно следующий вид:
class MyEditorControl : UserControl {
public MyEditableType Value {
get; set;
}
//
}
Так как MyEditorControl является обычным контролом, вы можете пользоваться всеми средствами предоставляемыми Windows.Forms: создавать на нем кнопки, выпадающие списки, переопределять виртуальные методы (OnPaint, OnMouseDown, ...) и др.Но это еще не все. В приведенном выше коде в качестве типа редактируемого свойства используется класс (или структура) MyEditableType. Этот тип является пользовательским и компонентная модель ничего не знает о нем. Для того чтобы объяснить компонентной модели как обращаться с этим типом, для него необходимо задать атрибут TypeConverterAttribute. В качестве параметра этот атрибут принимает тип класса, унаследованного от TypeConverter.
Исходный код в котором вы сможете увидеть применение редакторов свойств на практике можно найти здесь.
воскресенье, 6 мая 2012 г.
Запрос .NET программой прав администратора при запуске
Для того чтобы при запуске программы на C# выводился запрос на получение прав администратора нужно:
Добавить в проект Visual Studio файл монифеста Project->New Item->Application Manifest File
В добавившемся файле заменить строку:
Добавить в проект Visual Studio файл монифеста Project->New Item->Application Manifest File
В добавившемся файле заменить строку:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />на следующую:
<requestedExecutionLevel level="requireAdministrator" uiaccess="false" />После этого рядом с иконкой программы появится картинка щита, указывающая что запуск программы требует прав администратора.
Подписаться на:
Сообщения (Atom)