none
Duvida em ComboBox e Tamanho RRS feed

  • Pergunta

  • Olá

    Eu tenho um ComboBox, e ele é obrigatório ter o tamanho que tem, porem isso me gera um problema, os dados q estão dentro dele são maiores do q ele, então qndo eu clico e lista os dados em baixo, sempre corta parte dos dados, ai eu fui na opção DropDownWidth e mudei o tamanho, porem eu ñ gostaria que fosse dessa forma assim tão estática, gostaria que o tamanho se auto ajustasse conforme o tamanho do que tem dentro dele.

    Como posso fazer isso ?


    Obrigado
    sábado, 10 de julho de 2010 01:15

Respostas

  • Henrique,

    Segue a implementação que o nosso amigo acima sugeriu:

    http://www.xtremedotnettalk.com/showthread.php?t=71232


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    domingo, 11 de julho de 2010 16:08
    Moderador
  • faz um método que veja qual é a maior string que existe na coleção de itens.. ai multiplica por algum número a atribui a propriedade DropDownWidth (Gambiarra)

     

     

    fiz assim e funciono:

     

          int maior = 0;
          foreach (string linha in comboBox1.Items)
          {
            if(maior < linha.Length)
              maior = linha.Length;
          }
    
          comboBox1.DropDownWidth = maior * 7;
    

     

    Em algum momento vc faz a atribuição dos itens ao combo, após fazer as atribuições chama um método com esse código...

     

    att


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    sábado, 10 de julho de 2010 01:45
  • Ou altere seu método para esse código...

          int maior = 0;
          foreach (string linha in cb.Items)
          {
            if (maior < linha.Length)
              maior = linha.Length;
          }
    
          if(maior > 0)
            cb.DropDownWidth = maior * 6;
    

    Antes de atribuir o valor maior a propriedade DropDownWidth ele testa para verificar se é maior que zero!

     

     

    att


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    • Marcado como Resposta Henrique Alonso segunda-feira, 12 de julho de 2010 18:36
    domingo, 11 de julho de 2010 23:33
  • Desculpa Henrique, agora que vi como você está preenchendo seu Combo.. faz assim que vai funcionar...

     

     

          foreach (DataRowView dtrw in cb.Items)
          {
            maior = dtrw.Row["NOM_ESTADO"].ToString().Length;
          }
    
          if (cb.Items.Count > 0)
            cb.DropDownWidth = maior * 7;

     

     

    att


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    • Marcado como Resposta Henrique Alonso segunda-feira, 12 de julho de 2010 18:36
    domingo, 11 de julho de 2010 23:53

Todas as Respostas

  • faz um método que veja qual é a maior string que existe na coleção de itens.. ai multiplica por algum número a atribui a propriedade DropDownWidth (Gambiarra)

     

     

    fiz assim e funciono:

     

          int maior = 0;
          foreach (string linha in comboBox1.Items)
          {
            if(maior < linha.Length)
              maior = linha.Length;
          }
    
          comboBox1.DropDownWidth = maior * 7;
    

     

    Em algum momento vc faz a atribuição dos itens ao combo, após fazer as atribuições chama um método com esse código...

     

    att


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    sábado, 10 de julho de 2010 01:45
  • Henrique,

    Segue a implementação que o nosso amigo acima sugeriu:

    http://www.xtremedotnettalk.com/showthread.php?t=71232


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    domingo, 11 de julho de 2010 16:08
    Moderador
  • Deu +/- certo, pois eu fiz da seguinte forma:

     

    private void autoDropDownWidth(myComboBoxAC cb)
    {
     int maior = 0;
     foreach (string linha in cb.Items)
     {
      if (maior < linha.Length)
       maior = linha.Length;
     }
    
     cb.DropDownWidth = maior * 6;
    }
    
    
    private void CarreregaComboBox()
    {
     cls_Banco bd = new cls_Banco();
     try
     {
      bd.Comando.CommandText = "select * from ESTADO " +
             " ORDER BY NOM_ESTADO";
      cb_UF.DisplayMember = "NOM_ESTADO";
      cb_UF.ValueMember = "COD_ESTADO";
      cb_UF.DataSource = bd.ExecuteComando();
      cb_UF.SelectedIndex = -1;
      autoDropDownWidth(cb_UF);
     }
     catch
     {
      MessageBox.Show("ERRO.\nNão Foi Possível Acessar o Banco de Dados", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
     }
    }

     

    Porem após ele carregar o comboBox, e ajustar, dá o erro do catch.

    Ai ñ dá certo.

    É possivel arrumar isso ?


    domingo, 11 de julho de 2010 20:34
  • Boa noite

     

    Qual é o erro?


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    domingo, 11 de julho de 2010 21:53
  • esse é  o erro:
    "ERRO.
    Não Foi Possível Acessar o Banco de Dados
    "

    ->

    System.IvalidCastException: Unable to cast object of type
    'System.Data.DataRowView' to type 'System.String'.
    at Proj_SI.cls_autoDropDownWidth.autoDropDownWidth(ComboBox cb) in
    .....
    domingo, 11 de julho de 2010 22:56
  • Henrique, verifica se a sua consulta esta retornando registros, pois se não estiver a propriedade Width não pode ser zero!

     

    Antes de chamar o método autoDropDownWidth faça um teste para verificar se existem itens, se não existir você não pode chamar o método...


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    domingo, 11 de julho de 2010 23:28
  • mas qndo eu tiro esse método funciona certinho, o meu ComboBox é carregado normalmente, só o tamanho q ñ muda.
    domingo, 11 de julho de 2010 23:29
  • Ou altere seu método para esse código...

          int maior = 0;
          foreach (string linha in cb.Items)
          {
            if (maior < linha.Length)
              maior = linha.Length;
          }
    
          if(maior > 0)
            cb.DropDownWidth = maior * 6;
    

    Antes de atribuir o valor maior a propriedade DropDownWidth ele testa para verificar se é maior que zero!

     

     

    att


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    • Marcado como Resposta Henrique Alonso segunda-feira, 12 de julho de 2010 18:36
    domingo, 11 de julho de 2010 23:33
  • então fiz isso mas o erro continuou...

     

    porem após dá o erro, ele mostra os itens do ComboBox, mas ñ auto ajusta

    domingo, 11 de julho de 2010 23:42
  • Desculpa Henrique, agora que vi como você está preenchendo seu Combo.. faz assim que vai funcionar...

     

     

          foreach (DataRowView dtrw in cb.Items)
          {
            maior = dtrw.Row["NOM_ESTADO"].ToString().Length;
          }
    
          if (cb.Items.Count > 0)
            cb.DropDownWidth = maior * 7;

     

     

    att


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    • Marcado como Resposta Henrique Alonso segunda-feira, 12 de julho de 2010 18:36
    domingo, 11 de julho de 2010 23:53
  • Henrique,

    Segue a implementação que o nosso amigo acima sugeriu:

    http://www.xtremedotnettalk.com/showthread.php?t=71232


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima


    Valeu André, também me foi util este link que passou.

    Obrigado pela dica.


    Elcio João de Lima - VB6, C#, Plataforma .NET e WM [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    domingo, 11 de julho de 2010 23:56
  • Testa a ultima opção q te enviei!

     

     

    att


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    segunda-feira, 12 de julho de 2010 01:14
  • Deu certo !!!

    Eu fiz assim:

     

     

    public void autoDropDownWidth(ComboBox cb)
    {
      int maior = 0;
      foreach (DataRowView dtrw in cb.Items)
      {
        if (maior < dtrw.Row[cb.DisplayMember].ToString().Length)
          maior = dtrw.Row[cb.DisplayMember].ToString().Length;
      }
    
      if (cb.Items.Count > 0)
        cb.DropDownWidth = maior * 8;
    }

     

     

    Multipliquei por 8 p\ dar certo.

     

    E devido ao fato de eu estar fazendo e ter criado uma classe para isso, para facilitar a manutenção, eu estou passando por parâmetro o comboBox, p\ poder utilizar em todos os ComboBox que utilizo e carrego c\ dados de diferentes locais do meu BD, eu fiz assim:

    dtrw.Row[cb.DisplayMember].ToString().Length

    Isso que eu fiz está correto ?

    segunda-feira, 12 de julho de 2010 03:14
  • Opa, está correto sim...

     

     

    isso mesmo fica dinâmico!

     

     

    att


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    segunda-feira, 12 de julho de 2010 18:24