Jump to content
SLIFE

Problema no Focus

Recommended Posts

SLIFE

Boas a todos!

Estava aqui a fazer uns testes para implementar mais logo, e como já não é a primeira vez que isto me acontece, decidi perguntar, pode ser mesmo erro meu ou mesmo azelhice.

O que se passa é o seguinte, e já não é a primeira vez, quando coloco num form_load o focus em um controlo especifico, nunca me funciona, porque será?

Por exemplo tenho este pequeno código:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.CenterToScreen()
        txtnome.Text = My.Settings.UltimoNome
        If txtnome.Text = "" Then
            txtnome.Focus()
        Else
            txtpassword.Focus()
        End If
    End Sub

Porque é que ele não faz a instrução dada??

Isto é, ele faz porque pelo debug já vi que ele passa pelas respectivas linhas de codigo, mas não me faz o focus conforme deveria!

Se alguem me poder dizer o porque, agradecia.

Cpts

SJC


Sandro Coelho

Share this post


Link to post
Share on other sites
Andrepereira9

Boas.

Isso também me acontece sempre, mas não sei porquê.

Mas eu meto-lhe um timer, definido com 100 Milisegundos, a ao disparar o timer, faço então a função para ganhar o focus.

Melhor Forma?? Não.  Resulta?  Até agora  :cheesygrin::) :)


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
Chaveca

http://bytes.com/topic/visual-basic-net/answers/372860-cannot-set-focus-object-form-load-event

The focus can only be set to a control that is (1) visible and (2) enabled.

In the form's 'Load' event, the form is not yet visible and thus setting the

focus doesn't take effect.

Ou seja até o for estar criado não vai ser possivel focar logo

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.CenterToScreen()
        txtnome.Text = My.Settings.UltimoNome
        Me.show()
        If txtnome.Text = "" Then
            txtnome.Focus()
        Else
            txtpassword.Focus()
        End If
    End Sub

Assim já deve dar


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
SLIFE

Usem o TabIndex

Boas Caça

Eu já estive de volta do tabindex, mas nem assim!

Como ves no exemplo que dei, eu quero que ele fique com o focus no txtpassword, caso o txtnome tenha texto escrito.

Coloquei os tabs já de diversas maneiras, mas mesmo assim ele não corresponde ao que quero.

Porque por exemplo se colocar o tabindex desta maneira:

txtnome - 0

txtpassword - 1

btnok - 2

ele faz a verificação que está acima mas mete sempre o focus no txtnome, independentemente de ter texto ou nao.

Se meter:

txtnome - 1

txtpassword - 0

btnok - 2

Ele mete sempre o focus no txtpassword, mesmo fazendo a verificação.

Parece que nao liga ou nao executa a instrução dada, mesmo passando por ela.

Muito esquisito.

O timer é uma opção, mas não deveria ser assim....

Chaveca - e não existe nenhuma opção de verificar se o form já está criado? E depois atribuir entao o focus?

Cpts

SJC


Sandro Coelho

Share this post


Link to post
Share on other sites
Andrepereira9

Tenta o evento .Paint do Form


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
SLIFE

Assim já deve dar

Sim Chaveca, pelo teste rápido que fiz, parece que assim funciona!

Obrigado.

Pensei que seria azelhice minha ou que havia alguma opção no form para poder dar focus no load.

Mas parece que apenas tenho que colocar o me.show() antes de atribuir o focus aos controlos que quero!

Cpts

SJC


Sandro Coelho

Share this post


Link to post
Share on other sites
bioshock

Deves utilizar a sugestão do @Caça.

If Not TextBox1.Text = "" Then
            TextBox2.TabIndex = 0
        End If

Share this post


Link to post
Share on other sites
SLIFE

Boas

Sim parece que existe diversas maneiras de colocar a funcionar!

Obrigado a todos pelas dicas!

Cpts

SJC


Sandro Coelho

Share this post


Link to post
Share on other sites
bioshock

Sim, também funciona. Mas também deves fazer como o exemplo que eu dei, trocando apenas e só o:

TextBox2.TabIndex = 0

por:

TextBox2.Select()

É escusado haver um If -> Then -> Else para o que é pretendido.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.