none
ListBox RRS feed

  • Pergunta

  • Por favor, quando eu faço um Bind em um ListBox é normal ele passar pelo SelectedIndexChanged?




    private void ObterTitulos()
            {
                List<FormulasVO> formulas = FormulaDAO.ObterFormulas();
                TituloLsb.Items.Clear();
                TituloLsb.DisplayMember = "TITULO";
                TituloLsb.ValueMember = "ID";
                TituloLsb.DataSource = formulas
            }
       private void TituloLsb_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (this.TituloLsb.SelectedIndex >= 0)
                {
                    int id = int.Parse(TituloLsb.SelectedItem.ToString());
                    PreencherForm(id);
                }
            }
    Estou tem problemas porque sele já passa e eu não tenho valor no SelectItem.

    Obrigado.
    Fabio Galante Mans - www.mans.com.br
    terça-feira, 24 de novembro de 2009 19:50

Respostas

  • Fábio,

    Sim, é normal e é possível tratar isso de diversas maneiras.

    1 - Criar uma variável do tipo boolean que controla se o evento será executado.

    private bool _listando = false;

    private void ObterTitulos()
    {
        this._listando = true;
        ...
        this._listando = false;
    }

    private void TituloLsb_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (this._listando)
            return;
        ...


    2 - Retirar o handler do evento no início do método e adicioná-lo novamente no final.

    private void ObterTitulos()
    {
        this.TituloLst.SelectedIndexChanged -=
    this.TituloLsb_SelectedIndexChanged;
        ...
        this.TituloLst.SelectedIndexChanged += this.TituloLsb_SelectedIndexChanged;
    }

    3 - Dependendo da aplicação é possível adicionar o handler do evento somente após modificar o DataSource.

    private void ObterTitulos()
    {
        ...
        this.TituloLst.SelectedIndexChanged += this.TituloLsb_SelectedIndexChanged;
    }

    Espero ter ajudado.

    Att.

    Ari C. Raimundo
    quarta-feira, 25 de novembro de 2009 01:23
    Moderador