Есть объект, свойства которого редактирую в PropertyGrid. Для одного из свойств использую TypeConverter со списком стандартных значений: пример: Выпадающий список значений: {"true", "false"} преобразуется в {"1", "0"}. Все работает OK пока выбирается значение из выпадающего списка. Но! DoubleClick на этом свойстве приводит к изменению значения на следующее без вызова соответствующего метода конвертора! То есть значение на выходе в этом случае ="true" или "false" вместо "1" или "0". Как решить проблему???
Re: Помогите с PropertyGrid
От:
Аноним
Дата:
20.07.05 11:04
Оценка:
Здравствуйте, min7, Вы писали:
M>Есть объект, свойства которого редактирую в PropertyGrid. Для одного из свойств использую TypeConverter со списком стандартных значений: пример: Выпадающий список значений: {"true", "false"} преобразуется в {"1", "0"}. Все работает OK пока выбирается значение из выпадающего списка. Но! DoubleClick на этом свойстве приводит к изменению значения на следующее без вызова соответствующего метода конвертора! То есть значение на выходе в этом случае ="true" или "false" вместо "1" или "0". Как решить проблему???
Для таких простых вещей, думаю, не стоит использовать TypeConverter. Можно попробовать сделать, например, следующим образом:
Public Enum YesNo
Да
Нет
End Enum
Public Property IsNew() As YesNo
Get
Return _IsNew
End Get
Set(ByVal value As YesNo)
_IsNew = value
End Set
End Property
Это я делаю еще и для того, чтобы в PropertyGrid отображалась русские словеса ...
А>Public Enum YesNo А> Да А> Нет А>End Enum
А>Public Property IsNew() As YesNo А> Get А> Return _IsNew А> End Get А> Set(ByVal value As YesNo) А> _IsNew = value А> End Set А>End Property
А>Это я делаю еще и для того, чтобы в PropertyGrid отображалась русские словеса ...
Словарь заранее не известен и передается в процедуру редактирования (с пом. PropertyGrid) как параметр. Сформулирую вопрос иначе: как отменить обработку DoubleClick для свойств внутри PropertyGrid или как заставить выполняться методы ConvertFrom/ConvertTo при DoubleClick? Если можно — на примере C#...
Здравствуйте, min7, Вы писали:
M>Есть объект, свойства которого редактирую в PropertyGrid. Для одного из свойств использую TypeConverter со списком стандартных значений: пример: Выпадающий список значений: {"true", "false"} преобразуется в {"1", "0"}. Все работает OK пока выбирается значение из выпадающего списка. Но! DoubleClick на этом свойстве приводит к изменению значения на следующее без вызова соответствующего метода конвертора! То есть значение на выходе в этом случае ="true" или "false" вместо "1" или "0". Как решить проблему???
Парился два дня с той же проблемой. Решил. Но решение не блещет элегантностью.
Когда создаешь свою пропертю, то тип ее указывай не булевский, а object. Потом проверяй тип в set и, если необходимо конвертируй ее СВОИМ же конвертером. Ну а затем присваивай значения.
[TypeConverter(typeof(RusBoolConverter))]
public object MyBool
{
get
{
return fMyBool;
}
set
{
RusBoolConverter Conv;
bool v = false;
if (value is bool)
{
v = (bool)value;
} else
{
Conv = new RusBoolConverter();
v = (bool)Conv.ConvertFrom(null,null,value);
}
fMyBool = v;
}
}
С перечислениями и списками поступай также.
Удачи.
Re[2]: Помогите с PropertyGrid
От:
Аноним
Дата:
24.11.06 09:09
Оценка:
Двойной клик в PropertyGrid можно отменить следующим образом:
Class PropertyView
Inherits NativeWindow
Private Const WM_LBUTTONDBLCLK = &H203
Protected Overrides Sub WndProc(ByRef m As Message)
If m.msg = WM_LBUTTONDBLCLK Then
Return
End If
MyBase.WndProc(m)
End Sub
End Class
Dim propView As Control = GetType(PropertyGrid).InvokeMember("gridView", _
BindingFlags.NonPublic Or BindingFlags.GetField Or BindingFlags.Instance, _
Nothing, pgGrid, Nothing)
Dim nativeView As New PropertyView()
nativeView.AssignHandle(propView.Handle)