Помогите с PropertyGrid
От: min7  
Дата: 20.07.05 10:38
Оценка:
Есть объект, свойства которого редактирую в 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 отображалась русские словеса ...

Всего наилучшего
Re[2]: Помогите с PropertyGrid
От: min7  
Дата: 20.07.05 12:18
Оценка:
А>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#...
Re: Помогите с PropertyGrid
От: RvS_vs Россия  
Дата: 31.08.05 13:47
Оценка:
Здравствуйте, 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)


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.