DATASOURCE
Olá pessoal, tenho uma fonte de dados em um controle COMBOBOX e preencho esta fonte no LOAD do Form, e tenho tambem um evento para o mesmo combobox SelectedIndexChanged pegando o item selecionado. Quando inicio o sistema, gera um erro por causa do evento SelectedIndexChanged, se eu retirar este evento, o controle é preenchido normalmente.
Alguem sabe como contornar este problema?
vlw
Alguem sabe como contornar este problema?
vlw
Poste estes 2 eventos aqui para darmos uma analisada, assim poderemos ver o que está ocorrendo.
Será que você não está atropelando as coisas no evento SelectedIndexChanged?
Será que você não está atropelando as coisas no evento SelectedIndexChanged?
O que acontece na verdade é que quando carrego os dados no combobox a partir do load do form , o evento SelectedIndexChanged do combobox tambem é acionado em conjunto com o preenchimento do combobox, ou seja, em cada linha preenchida no combobox, o evento SelectedIndexChanged é acionado, por este motivo, gera-se o erro . Agora, como contornar isso? vlw
Uma sugestão é criar uma variável do tipo BOOLEAN para contornar o problema.
Declare a variável no FORM de forma que fique visÃvel para todo o formulário;
Set a variável para FALSE no evento LOAD do FORM;
Quando concluir a rotina que alimenta o COMBOBOX, set a variável para TRUE;
Por fim, no evento SELECTEDINDEXCHANGED é só verificar se a variável possue o valor TRUE, se sim, proceda com a rotina.
JABA, este evento só é disparado quando um item é selecionado na ComboBox, se você somente preencher não irá disparar.
Ex.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For N As Integer = 1 To 9
Me.ComboBox1.Items.Add(N.ToString)
Next
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
MsgBox(Me.ComboBox1.SelectedItem.ToString)
End Sub
Neste exemplo só irá ocorrer uma mensagem se eu selecionar um Ãtem.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For N As Integer = 1 To 9
Me.ComboBox1.Items.Add(N.ToString)
Next
[ô] Selecionando um Ãtem na ComboBox
[txt-color=#e80000] Me.ComboBox1.SelectedIndex = 0[/txt-color]
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
MsgBox(Me.ComboBox1.SelectedItem.ToString)
End Sub
Se você preencher a ComboBox e só selecionar o Ãtem quando houver necessidade... Será que resolve?
Se não, use a idéia do Tecla. Ela funcionará de certeza.
Ex.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For N As Integer = 1 To 9
Me.ComboBox1.Items.Add(N.ToString)
Next
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
MsgBox(Me.ComboBox1.SelectedItem.ToString)
End Sub
Neste exemplo só irá ocorrer uma mensagem se eu selecionar um Ãtem.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For N As Integer = 1 To 9
Me.ComboBox1.Items.Add(N.ToString)
Next
[ô] Selecionando um Ãtem na ComboBox
[txt-color=#e80000] Me.ComboBox1.SelectedIndex = 0[/txt-color]
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
MsgBox(Me.ComboBox1.SelectedItem.ToString)
End Sub
Se você preencher a ComboBox e só selecionar o Ãtem quando houver necessidade... Será que resolve?
Se não, use a idéia do Tecla. Ela funcionará de certeza.
Jaba,
Melhor vc seguir a dica do TECLA. Tive esse mesmo problema.
Crie uma variável boolena no módulo do formulário e utilize no load do form, indicando-a, por exemplo, como false.
No final do load do form, passe para true.
coloque todo o código do SelectedIndexChanged dentro de um bloco if, indicando que é para executar somente se for true.
Melhor vc seguir a dica do TECLA. Tive esse mesmo problema.
Crie uma variável boolena no módulo do formulário e utilize no load do form, indicando-a, por exemplo, como false.
No final do load do form, passe para true.
coloque todo o código do SelectedIndexChanged dentro de um bloco if, indicando que é para executar somente se for true.
Muito bom pessoal, eu tambem tinha pensado da forma como o Tecla falou, só queria saber se o componente tinha algum metodo para detectar isto, agora com relacao ao que JONATHANSTECKER falou, peço para verificar este mesmo codigo usando um DataSource, de qualquer forma, muito obrigado pelas respostas. vlw
JABA, como você está preenchendo a ComboBox com o DataSource?
Poderias postar aqui? Assim fica mais fácil para entender.
Poderias postar aqui? Assim fica mais fácil para entender.
JONATHANSTECKER , Estou usando assim no load do form:
dim dt as new datatable = sql () [ô]aqui é a consulta para extrair os dados do banco de dados.
apos preencher o datatable com os dados do banco, vinculo o mesmo ao combobox, desta forma:
ComboBox1.DataSource = dt
Qualque duvida é soh falar. vlw
dim dt as new datatable = sql () [ô]aqui é a consulta para extrair os dados do banco de dados.
apos preencher o datatable com os dados do banco, vinculo o mesmo ao combobox, desta forma:
ComboBox1.DataSource = dt
Qualque duvida é soh falar. vlw
Tópico encerrado , respostas não são mais permitidas