Как отобразить пользовательские строки при выборе нескольких элементов?

StackOverflow https://stackoverflow.com/questions/634630

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

<код>

<код>
/// <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? Прямо сейчас это поле всегда пустое.

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top