none
Habilitar e dasabilitar CRUD RRS feed

  • Pergunta

  • Saudações...

     

    Estou tentando automatizar a habilitação e desabilitação dos Botões CRUD... Estou tentando seguir a mesma lógica q fiz para manipular os TextBox, vjam:

     

    public void habilitaCampos(Control control)

    {

    foreach (Control ctl in control.Controls)

    {

    if (ctl is TextBox)

    {

    ((TextBox)ctl).Enabled = true;

    }

    }

    }

     

    Aí, tentei fazer com o ToolStrip:

     

    public void habDesabmenu(ToolStrip control)

    {

    foreach (ToolStrip ctl in control.Items)

    {

    if (ctl is ToolStripButton)

    {

    ((ToolStripButton)ctl).Enabled = !((ToolStripButton)ctl).Enabled;

    }

    }

    }

     

    Mas dá erro...

     

    Alguém poderia me ajudar?

     

    Obrigado...

     

     

    quinta-feira, 29 de janeiro de 2009 19:07

Respostas

  • Olá Jorge,

     

    Uma dica: Sempre que você enviar uma mensagem para um fórum, informe com detalhes qual é a mensagem de erro, exatamente onde (linha) esse erro acontece, e qual versão do .NET Framework e Visual Studio você utiliza.

     

    Fica muito mais fácil de ajudar assim Wink.

    ---

     

    Sobre a sua rotina de desabilitar os itens do ToolStrip, não está funcionando porque você está procurando objetos do tipo ToolStrip dentro da coleção Items, e depois você tenta fazer um cast para ToolStripButton, como se a classe ToolStripButton fosse uma classe derivada de ToolStrip (o que não é verdade).

     

    A classe base de todos os itens da ToolStrip é a classe ToolStripItem, portanto é por objetos dessa classe que você deve procurar na classe Items:

     

    Code Snippet

     

     foreach (ToolStripItem ctl in toolStrip1.Items)

     {

    // ...

     }

     

     

    ---

     

    Uma coisa que você deveria evitar, é esse monte de casts que você faz, que além de dificultar a leitura do código, ainda torna sua aplicação mais lenta. Nesse seu exemplo você faz 3 (três) casts (o operador is também conta como cast), quando na verdade só precisaria de um único cast:

     

    Code Snippet

     

     foreach (ToolStripItem ctl in toolStrip1.Items)

     {

    // Tenta fazer o cast para ToolStripButton

    ToolStripButton botao = ctl as ToolStripButton;

     

    // Conseguiu fazer o cast?

    if (ctl != null)

    {

    // Sim... Então é um ToolStripButton, e já temos sua referência

    // na variável botao. É só usar essa variavel onde precisar

    botao.Enabled = !botao.Enabled;

    }

     }

     

     

     

    Aliás, se você utiliza .NET Framework 3.0 ou superior, nem precisa de tudo isso... Pode filtrar todos os itens que você quer utilizando LINQ, e percorrer a lista já filtrada:

     

    Code Snippet

     

     // Percorre uma lista filtrada com apenas os itens do tipo ToolStripButton

     foreach (ToolStripButton botao in toolStrip1.Items.OfType<ToolStripButton>())

     {

    botao.Enabled = !botao.Enabled;

     }

     

     

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quinta-feira, 29 de janeiro de 2009 23:22
    Moderador