Usuário com melhor resposta
Duvida em ComboBox e Tamanho

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
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- Sugerido como Resposta AndreAlvesLimaModerator domingo, 11 de julho de 2010 16:09
- Marcado como Resposta Henrique Alonso domingo, 11 de julho de 2010 20:33
- Não Marcado como Resposta Henrique Alonso domingo, 11 de julho de 2010 20:40
- Marcado como Resposta Henrique Alonso segunda-feira, 12 de julho de 2010 18:36
-
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!- Sugerido como Resposta AndreAlvesLimaModerator domingo, 11 de julho de 2010 16:09
- Marcado como Resposta Henrique Alonso domingo, 11 de julho de 2010 20:33
- Não Marcado como Resposta Henrique Alonso domingo, 11 de julho de 2010 20:40
- Marcado como Resposta Henrique Alonso segunda-feira, 12 de julho de 2010 18:36
-
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
-
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
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!- Sugerido como Resposta AndreAlvesLimaModerator domingo, 11 de julho de 2010 16:09
- Marcado como Resposta Henrique Alonso domingo, 11 de julho de 2010 20:33
- Não Marcado como Resposta Henrique Alonso domingo, 11 de julho de 2010 20:40
- Marcado como Resposta Henrique Alonso segunda-feira, 12 de julho de 2010 18:36
-
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- Sugerido como Resposta AndreAlvesLimaModerator domingo, 11 de julho de 2010 16:09
- Marcado como Resposta Henrique Alonso domingo, 11 de julho de 2010 20:33
- Não Marcado como Resposta Henrique Alonso domingo, 11 de julho de 2010 20:40
- Marcado como Resposta Henrique Alonso segunda-feira, 12 de julho de 2010 18:36
-
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 ?
- Editado Henrique Alonso domingo, 11 de julho de 2010 20:41 correção
-
-
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
.....- Editado Henrique Alonso domingo, 11 de julho de 2010 23:27 Alteração
-
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! -
-
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
-
-
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
-
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] -
-
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 ?
-