Como faço para exibir seqüências personalizadas quando vários itens são selecionados?
-
10-07-2019 - |
Pergunta
Eu tenho uma grade de propriedade que me ajuda a gerenciar todos os controles em um formulário. Esses controles são para pessoas do tipo de designer, então eu realmente não estou preocupado que muito sobre a interface de utilizador ... até que alguém seleciona vários objetos.
Eu tenho um UITypeEditor para a propriedade "EffectiveDiameter" sobre estes objetos comuns. Ele mantém o controle de unidades (metros vs pés) e faz algumas coisas agradáveis ??on-the-fly. No entanto, quando alguém seleciona dois ou três objetos comuns, EffectiveDiameter está em branco, mesmo que avaliada como a mesma cadeia de texto.
Por exemplo, na maioria dos controles, a Microsoft tem a propriedade "Anchor", que tem uma saída de texto de "Top, Right". Quando você puxar para baixo é um objeto com um UITypeEditor agradável. No entanto, quando você seleciona cinco objetos no formulário que todos têm definindo o mesmo Anchor você ainda pode ver a string "Top, Right" na grade de propriedade.
/// <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;
}
}
}
Se eu selecionar vários dos meus objetos personalizados - todos com o mesmo diâmetro efetivo - como faço para obter EffectiveDiameter para exibição no PropertyGrid como âncora faz? Agora, esse campo está sempre em branco.
Solução
De sua descrição parece que você está falando sobre o effectiveDiameter do tipo double. Mas, em sua amostra que você está mostrando um UITypeEditor para a classe umConversion. Então, por favor esclarecer.
Se você está no segundo caso, onde sua propriedade é realmente uma classe de seu próprio e não um tipo primitivo, em seguida, garantir a implementar o método Equals. A classe MultiPropertyDescriptorGridEntry nas chamadas MS PropertyGrid Igual a de saber se todas as instâncias de destino têm o mesmo valor. Não tenho certeza se este é o seu problema, mas eu gostaria de testar se a eliminar essa possibilidade.
Outras dicas
Coloque um atributo TypeConverter
em cada propriedade também ..