none
Criação de componente - Como listar propriedades RRS feed

  • Pergunta

  • Olá pessoal!

    Bom , eu to criando um componente aqui no c# e queria saber qual tipo de dado eu utilizo para exibir uma  propriedade em formato de combobox no editor de propriedades.Eu quero exibir é uma lista de strings,mas quero que seja exibida como um combobox no editor de propriedades.

    Eu já tentei o  arraylist,o list e o array([]) normal, mas todos aparecem como Colletion no editor.

    Desde já, grato!

    sábado, 2 de outubro de 2010 20:07

Respostas

  • Ramiro,

    Para fazer isso você terá que criar um TypeConverter. Para isso, decore a sua propriedade com o atributo TypeConverter indicando o tipo do converter a ser utilizado. Veja o exemplo abaixo.

    public class SeuComponente : ComponentePai

    {

        [TypeConverter(typeof(InstanciaSQLConverter)), CategoryAttribute("Nome da categoria")]

        public string InstanciaSQLServer { get; set; }

    }

    Como a propriedade é uma string, posso criar um converter que herda de StringConverter. Por exemplo...

    public class InstanciaSQLConverter : StringConverter

    {

        // aqui você indica que existem valores padrão suportados

        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)

        {

            return true;

        }

     

        // retorno dos valores padrão (as instâncias)

        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)

        {

            // se precisar verificar o valor de outras propriedades, utilize

            // a linha abaixo

            // SeuComponente comp = context.Instance as SeuComponente;

     

            // aqui você lista as instâncias

            return new StandardValuesCollection(new string[] { "INST1", "INST2", "INST3" });

        }

    }

    Mais informações nos links abaixo.

    TypeConverter Class
    http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx

    StringConverter Class
    http://msdn.microsoft.com/en-us/library/system.componentmodel.stringconverter.aspx

    Type Descriptor Overview
    http://msdn.microsoft.com/en-us/library/ms171819.aspx

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

    terça-feira, 23 de novembro de 2010 02:01
    Moderador

Todas as Respostas

  • Ramo,

    Use o tipo de dados enum.

    []s,


    Carlos dos Santos - www.carloscds.net
    sábado, 2 de outubro de 2010 20:22
  • Olá!

    O enum no meu caso não serve.

    O meu componente ,quando criado, ele tem que listar todos nomes das instancias do SQL Server que estiverem ativas dentro deste campo,ou seja, tem uma rotina que vai listar todos esses nomes e apresentá-los nessa propriedade como se fosse realmente um enum.

    sábado, 2 de outubro de 2010 20:31
  • Olá!

    O enum no meu caso não serve.

    O meu componente ,quando criado, ele tem que listar todos nomes das instancias do SQL Server que estiverem ativas dentro deste campo,ou seja, tem uma rotina que vai listar todos esses nomes e apresentá-los nessa propriedade como se fosse realmente um enum.

    Se no teu caso nao pode, enum, list, array-list, o que queres fazer?

    qual e o principal obejectivo? o que queres fazer?


    Just Be Humble Malange!
    sábado, 16 de outubro de 2010 18:57
    Moderador
  • Olá! Malange, meu propósito é que meu componente , no editor de propriedades, mostre num determinado campo(um combobox) chamado "Server Instance ", uma listagem das instancias do Sql Server instalados no pc.

    Uma vez selecionado a instancia neste campo , listaria-se num outro campo - também combobox e chamado "DataBase" - os BDs registrados nessa instancia escolhida anteriormente.E, escolhido a instancia e o DataBase, num terceiro campo chamado "Tables", listaria-se os nomes das Tabelas do DataBase escolhido.E, novamente, escolhido a instancia,o DataBase e a Tabela , listaria-se em num quarto campo chamado "Fields", os nomes dos campos da Tabela selecionada no campo "Tables".

    Bem , num sei se entenderam o meu propósito, mas é isso aí que eu quero...Preencher um determinado campo\propriedade do meu componente de acordo com dados selecionados em outro campo\propriedade do componente. Lembrando que as informações devem aparecerem em campos do tipo combobox no editor de propriedades.

    Abraços!!

    quarta-feira, 27 de outubro de 2010 16:18
  • Olá! Malange, meu propósito é que meu componente , no editor de propriedades, mostre num determinado campo(um combobox) chamado "Server Instance ", uma listagem das instancias do Sql Server instalados no pc.

    Uma vez selecionado a instancia neste campo , listaria-se num outro campo - também combobox e chamado "DataBase" - os BDs registrados nessa instancia escolhida anteriormente.E, escolhido a instancia e o DataBase, num terceiro campo chamado "Tables", listaria-se os nomes das Tabelas do DataBase escolhido.E, novamente, escolhido a instancia,o DataBase e a Tabela , listaria-se em num quarto campo chamado "Fields", os nomes dos campos da Tabela selecionada no campo "Tables".

    Bem , num sei se entenderam o meu propósito, mas é isso aí que eu quero...Preencher um determinado campo\propriedade do meu componente de acordo com dados selecionados em outro campo\propriedade do componente. Lembrando que as informações devem aparecerem em campos do tipo combobox no editor de propriedades.

    Abraços!!

    Como ficou o seu problema?

     


    Just Be Humble Malange!
    sábado, 20 de novembro de 2010 19:15
    Moderador
  • Ramiro,

    Para fazer isso você terá que criar um TypeConverter. Para isso, decore a sua propriedade com o atributo TypeConverter indicando o tipo do converter a ser utilizado. Veja o exemplo abaixo.

    public class SeuComponente : ComponentePai

    {

        [TypeConverter(typeof(InstanciaSQLConverter)), CategoryAttribute("Nome da categoria")]

        public string InstanciaSQLServer { get; set; }

    }

    Como a propriedade é uma string, posso criar um converter que herda de StringConverter. Por exemplo...

    public class InstanciaSQLConverter : StringConverter

    {

        // aqui você indica que existem valores padrão suportados

        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)

        {

            return true;

        }

     

        // retorno dos valores padrão (as instâncias)

        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)

        {

            // se precisar verificar o valor de outras propriedades, utilize

            // a linha abaixo

            // SeuComponente comp = context.Instance as SeuComponente;

     

            // aqui você lista as instâncias

            return new StandardValuesCollection(new string[] { "INST1", "INST2", "INST3" });

        }

    }

    Mais informações nos links abaixo.

    TypeConverter Class
    http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx

    StringConverter Class
    http://msdn.microsoft.com/en-us/library/system.componentmodel.stringconverter.aspx

    Type Descriptor Overview
    http://msdn.microsoft.com/en-us/library/ms171819.aspx

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

    terça-feira, 23 de novembro de 2010 02:01
    Moderador