Como faço para exibir seqüências personalizadas quando vários itens são selecionados?

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

  •  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.

Foi útil?

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 ..

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top