• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zephirus

Focus em dialogbox

7 mensagens neste tópico

Olá,

Já procurei na internet solução para o meu problema mas não encontrei nada. O que se passa é o seguinte:

- Eu tenho uma MainForm da minha aplicação e tenho uma outra form que está configurada para "FixedDialog". Assim que arranco o meu programa, mostro a minha dialogbox e até aqui tudo bem. O problema é que se mudar para outra janela qualquer (de qualquer outro programa ou até para o desktop), quando volto para a MainForm, a dialogbox não está visível. Tenho de fazer taskswitch para a ver.

- Além deste problema, a dialogbox está configurada para não aparecer na taskbar, no entanto aparece quando se faz taskswitch. O que eu pretendia também era que só aparecesse na taskbar a MainForm e também no taskswitch independentemente do facto de eu ter uma dialogbox aberta ou não.

O meu código para o load da MainForm é este:

Me.Show()
Select Case asAlreadyLoggedIn
  Case False
    Login.ShowDialog()
    asAlreadyLoggedIn = True
  Case True
End Select

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta

Me.BringToFront

no arranque do dialog.

Ou em extremo caso,

Me.TopMost=True

no arranque do dialog.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta

Me.BringToFront

no arranque do dialog.

Quando eu faço o ShowDialog, a form já aparece à frente da MainForm. O problema é que depois de aparecer, se eu for ao desktop por exemplo e depois clicar na taskbar de novo, aparece-me a MainForm sem a DialogBox. Quando eu inicio o meu programa, na taskbar aparece-me o nome da MainForm e não da janela de diálogo, tem alguma coisa a ver com isto?

EDIT: isso do topmost funciona, é certo mas não é o que pretendo pois assim tenho sempre a janela à frente de qualquer outra de outro programa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesse caso, terás de controlar a instância do dialog e dizeres o que ela há-de fazer a partir do evento GotFocus (ou coisa parecida) da form principal.

Ou, tenta dar a main form como ParentForm da dialog. Talvez assim ela apareça depois de focares a main. Eu não posso exprimentar agora ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesse caso, terás de controlar a instância do dialog e dizeres o que ela há-de fazer a partir do evento GotFocus (ou coisa parecida) da form principal.

Ou, tenta dar a main form como ParentForm da dialog. Talvez assim ela apareça depois de focares a main. Eu não posso exprimentar agora ;)

Vou tentar isso, obrigado. Já agora, e pode ser que ajude, eu tenho outras dialogbox no meu programa e todas elas funcionam como eu prentedo menos esta primeira que é chamada no Load da aplicação. Penso que tem a ver com isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Testei o MDIContainer e acontece o mesmo. Tem a ver com o facto de eu chamar a minha dialog form no load da main. Se eu a chamar depois já não acontece este problema. Como é que faço para que a form apareça no inicio do meu programa sem a chamar no Load?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, depois de mais umas cabeçadas  :wallbash:, lá consegui resolver o problema. Então é assim:

- Primeiro criei uma variável:

Public asAlreadyLoggedIn As Boolean = False

- No Load da MainForm tenho isto:

Me.Show()

- Depois tenho um pequeno código no activate da MainForm onde mostro a form dialogbox se a variável asAlreadyLoggedIn for falsa e depois mudo-a para True:

	Sub MainFormActivate(sender As Object, e As EventArgs) Handles MyBase.Activated
	Select Case asAlreadyLoggedIn
		Case True
		Case False
			asAlreadyLoggedIn = True
			Login.ShowDialog()
	End Select
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora