Pergunta

Eu tenho uma caixa de texto ligada à propriedade de um objeto (de fato, várias caixas de texto) em um formulário. Isso é um editor para um objeto. Ao editar alguns objetos e modificar valores em uma das caixas de texto que não consigo sair da caixa de texto (nem por guia nem clicando em outra caixa de texto). No entanto, esse nem sempre é o caso - ao editar outros objetos (do mesmo tipo), funciona bem.

Aqui está um snipet de código:

txtValue.DataBindings.Add("Text", _SourceObject, "PlannedValue", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "c")
txtEstPlacements.DataBindings.Add("Text", _SourceObject, "EstimatedPlacementCount")
txtReference.DataBindings.Add("Text", _SourceObject, "Reference")

Alguma sugestão?

Foi útil?

Solução

Parece um problema de validação de dados. Verifique se os controles no formulário têm suas propriedades de avaliação de causas definidas como true ou falsa.

Verifique também a propriedade Autovalidate no formulário. Provavelmente está definido como ativar a sessão de foco (que é o padrão).

Também pode ser que o valor fornecido na caixa de texto não possa ser convertido para o tipo de propriedade a que está ligado no objeto de dados de origem. Acredito que a classe Convert é usada para isso (embora eu possa estar errado aqui).

Você pode querer conferir Este artigo no MSDN, que abrange a validação do Winforms com alguns detalhes.

Outras dicas

Se o seu formulário tiver autovalidado == EnablePreventFocusChange, você acabará com o foco preso em qualquer campo que falhe na validação.

Observe que a validação é considerada falhada se houver uma exceção ao escrever o valor no objeto.

Tente definir um ponto de interrupção no ponto de entrada do setter da propriedade que está vinculada ao controle onde o cursor fica preso. Então, um único passo para ver se uma exceção é levantada.

Se o ponto de interrupção nunca disparar, a exceção pode estar ocorrendo dentro da estrutura do banco de dados.

Ao contrário do Popular Believe, a estrutura do banco de dados registra erros de log e outras informações úteis - ele usa o suporte do espaço de nome System.Diagnostics para fazer isso. Eu esqueço os detalhes, mas eles estão no MSDN - você poderá ver os diagnósticos na janela Mensagens do Visual Studio enquanto o aplicativo é executado. Muito útil para solucionar problemas com o banco de dados.

Para corrigir a falha de validação, devido à incapacidade do banco de dados de definir DBNull.Value No TextBox.Text, você pode adicionar a seguinte linha na seção Form_load:

TextBox1.DataBindings["Text"].NullValue = string.Empty;

Para cada caixa de texto, você deseja permitir que o valor vazio seja validado corretamente.

Veja mais detalhes sobre a Microsoft Connect.

E em:

Não consigo escapar da caixa de texto vazia

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top