2013-04-09 5 views
1

Bon, j'ai un peu de mal ici. Je crée une fenêtre de connexion pour une application, mais j'essaie d'obtenir que l'application se connecte automatiquement (c.-à-d. Exécute les fonctions qui se produisent lorsque l'utilisateur se connecte) au démarrage, sans afficher l'écran de connexion, si les paramètres avez déjà un email et un mot de passe stockés. J'ai une notification Icône System Tray qui s'affiche lorsque l'application est en cours d'exécution et lorsque le formulaire n'est pas visible, une notification s'affiche pour que l'utilisateur sache qu'il est toujours en cours d'exécution et clique sur l'icône pour ouvrir l'écran de connexion.Procédure de connexion automatique (Masquer le formulaire) vb.NET Windows Forms

Regardez le code suivant. Je sais que cet événement If If est appelé et fonctionne correctement, car il exécute tout à l'intérieur de l'instruction SAUFmasquant le formulaire. Pourquoi ne change-t-il pas d'invisible? J'ai aussi essayé Me.Hide, et le même problème. La notification de ballon apparaît, les zones de texte remplissent les données précédemment stockées ... mais la forme reste visible ...

Private Sub RadFrmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    'Checks settings to see if email and password have already been stored and enters them into text fields, proceeds to automatically update access list 
    If Not String.IsNullOrEmpty(My.Settings.Email) And Not String.IsNullOrEmpty(My.Settings.Password) Then 
     TxtEmail.Text = My.Settings.Email 
     TxtPassword.Text = My.Settings.Password 

     Me.Visible = False 

     'Displays Balloon Tip 
     ntfySystemTrayIcon.ShowBalloonTip(800) 
    End If 

End Sub 

Comme une note supplémentaire, j'ai ajouté un bouton de test pour cacher la forme, et fonctionne parfaitement:

Private Sub BtnHide_Click(sender As Object, e As EventArgs) Handles BtnHide.Click 
    'Hides form(for testing notification tray icon and balloon tip 
    Me.Visible = False 
    ntfySystemTrayIcon.ShowBalloonTip(1000) 
End Sub 
+0

est cette ligne 'Me.Visible = False 'Toujours être touché quand vous vous y attendez? Avez-vous franchi et vérifié que toutes les lignes sont touchées? Avez-vous essayé de supprimer 'ntfySystemTrayIcon.ShowBalloonTip (800)' du gestionnaire Load et de voir si le formulaire est invisible? – djv

+0

Oui, oui et oui. Il est toujours touché, et j'ai même complètement enlevé l'extrémité du ballon, et cela apparaît toujours. J'ai traversé et j'ai remarqué que le formulaire devient visible à l'étape End Sub. Je ne peux pas comprendre pourquoi c'est. J'ai aussi changé un peu, et j'ai appelé un autre sous qui a fait le reste du processus, et en mettant le formulaire invisible dedans, mais après le sous, il retourne au gestionnaire de charge et atteint l'étape End Sub, et la forme devient visible. Est-il possible que Load Handlers soit automatiquement défini sur visible = True à la fin du processus de chargement? –

+0

Donc, après avoir regardé les propriétés de l'événement pour le formulaire, j'ai trouvé un appelé: Visibilité modifiée. Après un instant, je l'ai fait appeler le gestionnaire btnHide.click pour cacher le formulaire. Le formulaire clignote pendant une milliseconde, puis se cache, affichant l'icône de notification. Le fait de passer en revue montre que le gestionnaire de charge rend définitivement la forme visible à l'étape End Sub, pour une raison quelconque, donc c'est une solution temporaire, pense-t-il. –

Répondre

2

(enlevé mes stupides instructions de débogage par défaut, car ils n'ont pas aidé du tout)

Mise à jour

bien, donc il y avait des questions similaires avant, un coup d'oeil ici: C#/.NET - WinForms - Instantiate a Form without showing it

court explication: habituellement quelque chose comme form1.show est utilisé, donc il est toujours changé en visible = true après que le form_load soit fini.

Soit utiliser l'événement et instructions form_shown ajouter le visible = false

ou un autre utilisateur recommandé de modifier les propriétés de démarrage à réduire au minimum et activer pour cacher le programme dans la barre des tâches. Cela aide à éviter ce scintillement agaçant. Je suppose qu'après cela vous pouvez changer les options.

Mise à jour 2 Ce qui suit semble bien fonctionner:

Private _IsVisible As Boolean 
Public Property IsVisible() As Boolean 
    Get 
     Return _IsVisible 
    End Get 
    Set(ByVal value As Boolean) 
     _IsVisible = value 
     If _IsVisible Then 
      Me.WindowState = FormWindowState.Normal 
      Me.ShowInTaskbar = True 
      Me.Visible = True 
      Me.Activate() 
     Else 
      Me.WindowState = FormWindowState.Minimized 
      Me.ShowInTaskbar = False 
      Me.Visible = False 
     End If 
    End Set 
End Property 

Si vous voulez vous débarrasser de la petite vacillante de la barre des tâches, puis modifiez la propriété ShowInTaskBar formes. Quand il est changé pendant le form_load, il semble y avoir un petit mouvement dans la barre des tâches.

Et pour le rendre parfait, en forme.Montré ajouter du code ci-dessous:

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown 
    Me.Visible = IsVisible 
End Sub 

maintenant il suffit d'utiliser

IsVisible = False 

à Form_load, ou si vous voulez montrer

IsVisible = True 
+0

Oui, j'ai traversé, et ça passe parfaitement. Le formulaire devient seulement visible quand il atteint l'étape 'End Sub'. J'ai franchi littéralement tout le code. –

+0

MERCI. Je vais devoir me débrouiller avec d'autres trucs que j'ai déjà fait pour que ça marche, mais c'est vraiment ce que je cherche, c'est un prodige que je n'ai pas trouvé quand j'ai fait une recherche de questions .. –

+0

J'ai mis à jour ma solution, maintenant il a des fragments de copier-coller-code qui vous feront TRÈS HEUREUX -_- :) – Amegon

0

juste quelques idées:

Si toutes vos tâches sont terminées en cas _load juste essayer d'appeler la fin. Bien sûr, cela supprimerait également votre icône de plateau.

Une autre possibilité consiste à appeler Me.Visible dans l'événement _Shown. Cela peut provoquer un clignotement sur l'écran. Si oui, vous pourriez peut-être positionner le formulaire sur l'écran dans _Load.

+0

J'ai beaucoup de différents types d'événements, pas tout est appelé dans l'événement de chargement, malheureusement. Mais je vois ce que vous voulez dire, j'ai peut-être trouvé une solution similaire. Consultez mon dernier commentaire sur la question). Je dois m'assurer qu'il charge encore complètement la première fois que l'utilisateur lance le programme, donc je dois m'assurer que sa position est centrée sur l'écran, donc je me demande si un flash rapide est correct .. Ou peut-être un petit écran de démarrage par-dessus? –

Questions connexes