Usuário com melhor resposta
Criação de componente - Como listar propriedades

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!
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.aspxStringConverter Class
http://msdn.microsoft.com/en-us/library/system.componentmodel.stringconverter.aspxType Descriptor Overview
http://msdn.microsoft.com/en-us/library/ms171819.aspxAtt.
Ari C. Raimundo
MCAD, MCTS
http://araimundo.blogspot.com- Sugerido como Resposta Eder CostaModerator terça-feira, 30 de novembro de 2010 14:55
- Marcado como Resposta Eder CostaModerator quarta-feira, 8 de dezembro de 2010 14:36
Todas as Respostas
-
-
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.
-
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! -
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!!
-
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! -
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.aspxStringConverter Class
http://msdn.microsoft.com/en-us/library/system.componentmodel.stringconverter.aspxType Descriptor Overview
http://msdn.microsoft.com/en-us/library/ms171819.aspxAtt.
Ari C. Raimundo
MCAD, MCTS
http://araimundo.blogspot.com- Sugerido como Resposta Eder CostaModerator terça-feira, 30 de novembro de 2010 14:55
- Marcado como Resposta Eder CostaModerator quarta-feira, 8 de dezembro de 2010 14:36