Как отобразить пользовательские строки при выборе нескольких элементов? - PullRequest
1 голос
/ 11 марта 2009

У меня есть таблица свойств, которая помогает мне управлять всеми элементами управления в форме. Эти элементы управления предназначены для людей дизайнерского типа, поэтому я не очень беспокоюсь о пользовательском интерфейсе ... пока кто-то не выберет несколько объектов.

У меня есть UITypeEditor для свойства "EffectiveDiameter" в этих общих объектах. Он отслеживает единицы (метры против футов) и делает некоторые приятные вещи на лету. Тем не менее, когда кто-то выбирает два или три общих объекта, EffectiveDiameter будет пустым, даже если он оценивает одну и ту же текстовую строку.

Например, в большинстве элементов управления Microsoft имеет свойство «Якорь», которое имеет текстовый вывод «Вверху, справа». Когда вы опускаете его, это объект с хорошим UITypeEditor. Тем не менее, когда вы выбираете пять объектов в вашей форме, которые имеют одинаковую настройку привязки, вы все равно можете увидеть строку «Вверху, справа» в сетке свойств.

</p> <pre><code>/// <summary> /// The default containing class for all Unit-Management Conversion classes. /// </summary> [ Serializable, EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)), TypeConverter(typeof(umConversionTypeConverter)), ] public class umConversion { ... } public class umConversionTypeEditor : UITypeEditor { ... } // Now, in my designer class, I have ... private double _effectiveDiameter { get; set; } [DisplayName("Effective Diameter")] public virtual umConversion EffectiveDiameter { get { umConversion ret = new umConversion (_effectiveDiameter); ret.MeasureInSI = _si; return ret; } set { _effectiveDiameter = value.ImperialUnits; } } }

Если я выберу несколько своих пользовательских объектов - все с одинаковым эффективным диаметром - как мне заставить EffectiveDiameter отображать в PropertyGrid, как это делает Anchor? Прямо сейчас это поле всегда пустое.

Ответы [ 2 ]

1 голос
/ 11 марта 2009

Из вашего описания кажется, что вы говорите об эффективном диаметре типа double. Но в вашем примере вы показываете UITypeEditor для класса umConversion. Поэтому, пожалуйста, уточните.

Если вы находитесь во втором случае, когда ваше свойство на самом деле является вашим собственным классом, а не примитивным типом, убедитесь, что реализован метод Equals. Класс MultiPropertyDescriptorGridEntry в MS PropertyGrid вызывает метод Equals, чтобы узнать, имеют ли все целевые экземпляры одинаковое значение. Не уверен, что это ваша проблема, но я бы проверил это, чтобы исключить эту возможность.

1 голос
/ 11 марта 2009

Поместите атрибут TypeConverter на каждое свойство тоже.

...