VB.net - Consulta e bloqueio de campo preenchido

09/10/2014

0

Boa noite

Tenho "trocentos" cadastros a serem feitos, com 10 campos para serem preenchidos, e apenas o primeiro campo não pode ter dados repetidos...

Minha pergunta é: Tem como emitir uma mensagem de que já existe tal dado digitado logo após o campo ser preenchido sem precisar preencher todos os outros 9 campos e clicar em salvar?

Exemplo mais detalhado:

O primeiro campo é Titulo, logo que se digita algum titulo e pressiona-se TAB para ir ao próximo campo , o programa exibe uma mensagem alertando de que esse titulo já existe (limpando o campo e retornando o focus para que seja digitado outro titulo)
Welington

Welington

Responder

Post mais votado

24/10/2014

Amigo, não sei se você sabe, mas ninguém aqui tem obrigação de responder nada. Este é um ambiente de colaboração voluntária e que sem dúvida ajuda muita gente diariamente. Eu mesmo me esforço para diariamente tentar ajudar no que posso, em praticamente todas as salas. Agora você questionar a utilidade do fórum por que o seu tópico especificamente não foi respondido rapidamente, aí já é um tanto egoísta. Ainda mais se tratando de algo tão simples.

Mas respondendo sua dúvida:
1) Após chamar o evento ShowDialog do form 2, você deve setar o foco para o textbox desejado utilizando o método Focus();
2) No Form2, basta usar o comando Close, não precisa chamar o Show do Form1, pois ele já estava visível antes do 2 ser aberto.

Um abraço e bons códigos.

Joel Rodrigues

Joel Rodrigues
Responder

Mais Posts

23/10/2014

Welington

Onde estão os programadores de vb.net? Se ninguém aparece qual é a utilidade do fórum???
Responder

24/10/2014

Welington

"Em se tratando de algo tão simples"??? Não é tão simples! Sua resposta nº1 fará o com que o foco seja setado para um textbox do Form2! O que perguntei foi quando eu sair do Form2 (clicando no botão "voltar") o txtTitulo que está no Form1 receba o foco. Se fosse no mesmo Form poderia usar : txtTitulo.focus() mas são Forms diferentes.

Quero "acionar" o método focus para o campo txtTitulo do Form1 ao clicar no botão Voltar, que está no Form2. (Como uma "ligação" entre forms que execute a ação, FOCUS, mas sendo feita do Form2 para ser executada no Form1)

Sei que ninguém tem obrigação de responder. Mas se ninguém responde....(e não é porque ninguém sabe, como vc mesmo disse "algo tão simples", para quem sabe vb.net acredito ser realmente fácil), parece que "escolhem" o que responder ... e essa certamente não é a ajuda que um fórum deveria ter. Veja vc foi o único a responder, e agradeço por isso (imagino o trabalho que vc tem para responder tantas perguntas/duvidas praticamente sozinho) até o Jair Souza tentou ajudar respondendo em C# (e ele não teria nem porque fazer isso, já que não estava respondendo em vb.net, que é o tópico aqui, mas mesmo assim tentou ajudar!)


[img:descricao=Form1]http://arquivo.devmedia.com.br/forum/imagem/390385-20141024-185414.jpg[/img]

[img:descricao=Form2]http://arquivo.devmedia.com.br/forum/imagem/390385-20141024-185434.jpg[/img]
Responder

24/10/2014

Joel Rodrigues

Vamos lá. Quando eu falei em colocar o foco no TextBox, eu me referia ao Form1 mesmo e não ao 2. Veja como seria:
Form2.ShowDialog()
txtTitulo.Focus()

Por que isso deve funcionar?
Quando você invoca o método ShowDialog, o fluxo principal do código é redirecionado para o Form2, e quando este é fechado, o fluxo retorna para a próxima linha após o ShowDialog. Por isso, fazendo dessa forma o seu Form2 seria aberto, você o utilizaria e após fechá-lo, a linha txtTitulo.Focus() seria executada, sem precisar fazer mais nada.

Teste aí e veja se dá certo.
Responder

25/10/2014

Welington

Valeu!!! Funcionou!

Só me restou um problema: Verifiquei que o BindingNavigator não mostra o primeiro cadastro (apresenta uma linha em branco, mostrando apenas o código) porque ao carregar o Form fiz com que todas as textbox fossem limpas (iniciando em branco) e isso causa essa "falha" no BindingNavigator.

Pergunto (e essa é difícil) como fazer com que o Form inicie sempre com as textbox em branco sem limpá-los como eu fiz?

Seria iniciar verificando qual foi o último registro gravado no BD + 1, ou seja, faz a verificação e exibe não o último registro mas o próximo que estaria obviamente em branco pronto para ser preenchido?
Responder

27/10/2014

Joel Rodrigues

A solução é mais ou menos essa. Mas bastaria você iniciar a inserção de um novo registro. Por exemplo:
bindingSource.AddNew();
Responder

27/10/2014

Welington

Coloquei essa solução mas ao clicar em "move first" ou "move previous" dá esse erro:

An unhandled exception of type 'System.Data.NoNullAllowedException' occurred in System.Data.dll

Additional information: Column 'Titulo' não permite valores nulls.


Tentei alterar no Bd as regras do campo Titulo (permitir comprimento zero (sim), requerido (não) e indexado(não)) e no VB alterei a propriedade CausesValidation para False, mas o erro continua

RESOLVIDO!!!

Era a chave primária que eu havia colocado no textbox Titulo que impedia o funcionamento!
Responder

01/11/2014

Welington

Eis que me aparece uma duvida/problema:

Como posso determinar quais as palavras que podem ser digitadas no preenchimento de uma textbox?

Explicando: tenho uma textbox Gêneros, como faço para que o usuário possa digitar apenas e exatamente gêneros de filmes (aventura, terror, drama, comédia, etc) e não qualquer palavra!? Caso seja digitada uma palavra qualquer (que não faça parte dos gêneros possíveis) não será permitido, exibindo uma mensagem de alerta.
Responder

04/11/2014

Joel Rodrigues

Nesse caso o ideal é usar um ComboBox, onde você já define os valores.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar