steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009
-
28 mai 2009 à 11:40
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
29 mai 2009 à 16:02
Bonjour à tous, voilà mon problème. Je voudrais démarrer mon application Windows composé de 3 forms, j'ai essayé dans un mainForm_load un "me.hide()" et un "me.visible = false" mais rien à faire.
J'ai vu que la solution serait de transformer l'application Windows en service Windows mais même en cherchant, je n'arrive pas à comprendre comment faire surtout que quand je change le type d'application en service, dans ma form principale, je ne peux plus faire par exemple form2.close() et form3.close(). Le rapport d'erreur me note ceci:
"Une référence à un membre non partagé requiert une référence d'objet".
Quelqu'un pourrait-il m'aider, je patauge depuis plus d'1h (voir même 2 ^^)
Merci beaucoup !
PS: si ça peut aider, le but de l'application c'est:
l'application se lance, on ne voit que l'icone dans le systray (ce que j'aimerais bien arriver à faire), régulièrement, un programme lit un fichier texte organisé comme ceci chaine1,chaine2,chaine3,ECHEC (ou REUSSIE),chaine4 lorsque durant la lecture du fichier le programme voir ECHEC, une infobulle s'affiche sur l'icone du systray, quand on clic sur cette infobulle la form principale (mainForm) s'affiche.
Tout ça c'est fait, il ne me reste plus que le démarrage avec Windows (ça j'ai trouvé des choses) et à ne pas afficher de form au démarrage de l'application (ça je patauge), et pour finir il faut que je publie l'application car elle n'est pas pour moi ^^
Je travail sous visual studio pro 2005 sous Windows XP
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 29 mai 2009 à 12:52
allez on va faire çà un peu plus propre quand même!
nouveau projet vb.net (2008) winform, nommé testsystray
on ajoute un module1 = >
Module Module1
Public Sub Main()
Dim fMain = New Form1
Application.Run(fMain)
End Sub
End Module
propriété du projet, application, formulaire de démarrage => Sub Main
NB : attention de bien décocher l'infrastructure
on pose un notifyicon1 sur la form1
on va :
*masquer la form dès le premier SHOW
*intercepter le click réduire, l'empêcher, et déclencher un HIDE
form1 =>
Public Class Form1
Private Enum MessageConstants
CANCEL = 0
WM_SYSCOMMAND = &H112
SC_MINIMIZE = &HF020
End Enum
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
NotifyIcon1.Icon = Me.Icon
NotifyIcon1.ShowBalloonTip(3000, Application.ProductName, "Double-cliquez pour afficher l'application", ToolTipIcon.Info)
End Sub
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
Me.Hide()
End Sub
Protected Overrides Sub WndProc(ByRef m As Message)
If (m.Msg = MessageConstants.WM_SYSCOMMAND) AndAlso (m.WParam.ToInt32 = MessageConstants.SC_MINIMIZE) Then
m.Msg = MessageConstants.CANCEL
Me.Hide()
End If
MyBase.WndProc(m)
End Sub
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 29 mai 2009 à 09:32
Si tu pouvais me donner des précisions sur le load mainForm stp, j'ai fais un module avec un sub main() mais après si je fais mainForm.showdialog() elle s'affiche sans prendre en compte le .hide dans le load de mainForm ou avec la propriété visible = false l forme n'apparait pas mais l'application se ferme.
D'ailleurs elle se ferme à chaque fois que je réduit la form et quand je la réduit je la cache (avec .hide, ça fait la même chose avec visible = false).
Je continu de chercher de mon côté
Vous n’avez pas trouvé la réponse que vous recherchez ?
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 29 mai 2009 à 09:55
En rusant je démarre ma form en minimisée et je met la propriété opacity à 0, pour la faire réapparaitre je la remet à 100. Pour l'instant je vais faire avec mais si vous avez mieux je suis preneur.
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 29 mai 2009 à 10:14
Bin quand je fais .hide dans _load dans mainform ou ailleurs dans un évènement de mainForm (quand je la réduit) ça me ferme l'application. et je veux qu'elle reste en permanance moi ^^ (sauf si l'utilisateur la ferme de lui même).
Si tu peux mettre _load de main form dans le main() du module que j'ai fait (où se trouve le sub main() ), je sais pas comment faire et je trouve pas grand chose pour le moment.
"ce ne serait pas le systray (notifyicon) qui gène justement?"
ça je sais pas, quand je réduis la form je veux qu'elle se cache dans le systray, le notifyIcone est toujours activé, il change d'icone quand un programme trouve ECHEC dans un texte qui est découpé puis affiché dans les colonnes d'1 ListView.
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 29 mai 2009 à 11:05
Bon, la ruse avec la propriété opacity à 0 et à 100 marche impec, c'est juste la première fois que l'on réouvre la form elle est à moitié dans le bord droit de l'écran mais après quand on la déplace et qu'on la recache, ça réapparait à sa position précédente.
Voilà je pense que ça ira mais je reste ouvert à toute autre proposition plus simple et plus intéressante ^^
Protected Overrides Sub WndProc(ByRef m As Message) If (m.Msg MessageConstants.WM_SYSCOMMAND) AndAlso (m.WParam.ToInt32 MessageConstants.SC_MINIMIZE) Then
m.Msg = MessageConstants.CANCEL
Me.Hide()
End If
MyBase.WndProc(m)
End Sub