Im использует сетку свойств для отображения некоторых свойств. Я хочу, чтобы пользователь мог выбрать шрифт, но не выбирать размер. Я добавил свойство шрифта, как это мой класс обволакивающей все метаданные для свойства сетки:Свойство PropertyGrid для настройки свойства шрифта
public class DetailFilterProperties : CollectionBase, ICustomTypeDescriptor
{
public DetailFilterProperties(TreeViewEventArgs e) {...}
[CategoryAttribute("Base"), DescriptionAttribute("The font"), ReadOnly(true)]
public Font Font
{
get;
set;
}
}
Теперь может кто-нибудь пожалуйста, скажите мне, как включить только 8pt размер, чтобы убедиться, что пользователь не может изменить размер в шрифтах диалог?
благодарит за вашу помощь.
Edit:
Я изменил свою программу немного, и я думаю, что им почти нет. Пожалуйста, посмотрите ...
Я добавил класс для моего редактора шрифта:
public class ETFontEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
FontDialog dlg = new FontDialog();
dlg = new FontDialog();
dlg.MaxSize = 8;
dlg.MinSize = 8;
Font font = value as Font;
if (font != null) {
dlg.Font = font;
}
if (dlg.ShowDialog() == DialogResult.OK)
return dlg.Font;
return base.EditValue(context, provider, value);
}
}
Затем я добавил новый класс конвертер:
public class ETFontConverter : TypeConverter
{
public ETFontConverter()
{
}
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
{
return new ETFontEditor();
}
}
который будет возвращать экземпляр моего шрифта редактор. И последнее, я добавил метод моей собственности класса Descriptor:
public override TypeConverter Converter
{
get
{
var key = _key;
if (key.ToString() == "Font") {
return new ETFontConverter(this);
}
return base.Converter;
}
}
который будет возвращать новый конвертер шрифта, если свойство шрифта устанавливается.
Проблема заключается в том, что программа не вызывает метод EditValue моего FontEditor, поэтому он всегда показывает диалог шрифта с большим количеством опций, чем просто 8pt для размера, доступного, когда я нажимаю кнопку эллипса. А также сетка свойств отображает имя свойства (Font), затем пробел (где должно быть имя шрифта), а затем кнопка эллипса. Кто-нибудь знает, как исправить эти две проблемы?
спасибо
Вы путаете конвертер и редактор. Пожалуйста, разместите репродукцию, если вам действительно нужна помощь. –