IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.net] Donner le focus a un Form


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut [VB.net] Donner le focus a un Form
    Bonjour!

    Soient 2 forms :
    -consulIE1
    -ConsulIECS1
    Ces 2 forms sont des "enfants" d'un form principal (application MDI)
    Le principe : apres avoir appuye sur un boutton du form consulIE1, je cree une instance ConsulIECS1 qui doit apparaitere et je veux aussi rendre consulIE1 "disabled".
    Quand on ferme ConsulIECS1, je souhaite que le form consulIE1 soit a nouveau "enabled" avec le focus.

    Dans le form consulIE1, on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ConsulIECS1.Show()
    Me.Enabled = False
    ConsulIECS1.Formcreator = Me
    Dans le form consulIECS1, on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       Private Sub ConsulIECS_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.VisibleChanged
       If Me.Visible = False Then
           Formcreator.Enabled = True
           'Formcreator.TopMost = True 'ne marche pas non plus
           Formcreator.Activate() 'pour donner le Focus to the Form
           Me.Dispose()
        End If
    End Sub
    Cela ne donne pas les resultats escomptes. En effet apres que le form ConsulIECS1 soit ferme, je dois cliquer sur le form consulIE1 pour le rendre actif (enabled)et notamment voir apparaitre, sur le form principal, son menu. Je voudrais pouvoir supprime ce click de souris!

    Merci de votre aide.

    Manix

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    le plus simple ne serait-il pas d'appeler ta feuille de façon modal ?

  3. #3
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par BalBalNet
    le plus simple ne serait-il pas d'appeler ta feuille de façon modal ?
    +1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ConsulIECS1.ShowDialog()

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    Merci Toxine, j'avais oublié de préciser le code

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Bonjour et merci!

    Je n'avais pas pense a essayer cela... Toutefois je recois un message d'erreur :

    "Une exception non geree du type 'System.InvalidOperationException' s'est produite dans system.windows.forms.dll

    Informations supplementaires : Les formulaires qui ne sont pas de niveau superieur ne peuvent pas etre affiches sous la forme d'une boite de dialogue modale. Supprimez le formulaire des parents avant d'appeler showDialog."

    Je pense que c'est du au fait que ConsulIE1 et ConsulIECE1 sont 2 petites soeures et que ConsulIECE1 est instanciee a partir de ConsulIE1....

  6. #6
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    Faut pas oublier qu'on est dans une application MDI et que les 2 forms sont des enfants de même niveau.
    => à priori pour moi c'est un gros : (=>Intervention de la fenêtre appelante pour les 2 forms enfants)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    il faut mettre ta feuille mère en paramètre du showdialog

    ConsulIECE1.showdialog(ConsulIE1)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    hum...c'est vrai elles sont soeurs !
    Donc c'est la "mère" qu'il faut mettre en param

  9. #9
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    oups, sorry, j'ai édité pcq j'avais une idée et que j'étais encore sur la page, mais je n'avais pas vu les nouveaux posts.

    => +1 pour BalBalNet je dirais

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    J'ai essaye mais cela ne fonctionne pas non plus... Aussi bien avec la soeure en parametre que avec la maman (qui s'appelle formmainwindow1). Sorry...

    Le message d'erreur est le meme.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    bizarre, la valeur MDIParent de ta feuille est renseignée peut être ?

  12. #12
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut
    il faut que tu surcharges le constructeur de la form fille appelé par l'autre form fille.

    dans la form fille appellé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private oFormfille As FormFilleappelante
        Public Sub New(ByVal NomForm As FormFilleappelante)
            oFormfille = NomForm
        End Sub
    puis quand tu créer ta form fille (formfilleappelé) tu fait dans ta formfille appelante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Dim oFormFille As New FormFilleappelé(me)
                oFormFille.Show()

  13. #13
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Merci Toxine mais malheureusement ca ne fonctionne pas non plus
    En fait que ce soit mon code initial ou ce que propose Toxine, je constate la meme chose :
    Quand l'utilisateur ferme le Form ConsulIECS1, je vois furtivement apparaitre le menu du form ConsulIE1 sur le form Formmainwindow1 (maman) mais celui-ci (le menu du form ConsulIE1) disparait aussi vite. C'est un peu comme-ci ConsulIE1 recoit le Focus pendant un tres court instant avant de le perdre...

  14. #14
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut
    oops en plus jme suis trompé :

    ce n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oFormFille As New FormFilleappelé(me) 
                oFormFille.Show()
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oFormFille As New FormFilleappelé(me) 
                oFormFille.ShowDialog(Me)

  15. #15
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    malheureusement, ca marche pas non plus, je recois a nouveau le message d'erreur deje mentionne precedemment...

  16. #16
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut
    huuuu je suis bête :
    il en faut pas passer la form fille appelante mais la form mère ...........

  17. #17
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    non... j'avais essaye aussi... meme verdict implacable...

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 83
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    Je ne sait pas si j'ai bien compris la problèmatique, mais pourquoi
    ne pas passer par un delegate.

    Exemple (en c#)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    public class consulIE1...
    {
    .........
     
    	// Ouverture form ConsulIECS1
     
    	private void button1_Click(object sender, System.EventArgs e)	
    	{
     
    		ConsulIECS1 f = new ConsulIECS1();
    		f.MdiParent = this.MdiParent;
    		// Delegate evenemnt
    		f.FermetureFenetre+=new FermetureFenetreEvent(f_FermetureFenetre);
    		f.Show();
    		this.Enabled = false;
     
    	}
     
    	// appel de l'évenement
     
    	private void f_FermetureFenetre(object sender,System.EventArgs e)
    	{
    		this.Enabled = true;
    		this.Focus();
    		this.txBox1.Focus();
    	}
    ......
    }
     
     
    // FORM ConsulIECS1
     
    public delegate void FermetureFenetreEvent(object sender,System.EventArgs e);
     
    public class consulIE1...
    {
     
    	public event FermetureFenetreEvent FermetureFenetre; 
     
    	public ConsulIECS1()
    	{
    		........
    	}
     
    	.......
     
    	// Sur fermeture de ConsulIECS1 (par exemple)
     
    	private void ConsulIECS1_Closed(object sender, System.EventArgs e)
    	{
    		if (FermetureFenetre!=null)FermetureFenetre(this,System.EventArgs.Empty);
     
    	}
    	......
    	...
    }

  19. #19
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Merci Nostradamus!! J'imagine que c'est une bonne ...

    Je ne sais pas vraiment très bien ce que c'est q'un delegate et je ne connais pas le C#...

    Je vais potasser sur les delegates ce week-end mais si quelqu'un peut m'aider pour me montrer ce que cela donne en VB.net, cela m'aiderait beaucoup!

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 83
    Points : 107
    Points
    107
    Par défaut
    De façon très schématique, le Delegate va te permettre à partir de ta form consulIE1 d'écouter
    les événement qui se produisent sur la form ConsulIECS1, et par conséquent de pouvoir réagir à
    certains événements (dans cet exemple, ce sera la fermeture de ConsulIECS1).

    Code en VB.net (n'étant pas un spécialiste de ce langage, il doit y avoir de nombreuses erreurs
    - j'ai par exemple zappé la signature du delegate en supprimant le System.EventArgs, mais il
    doit normalement fonctionner).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    // FORM ConsulIECS1
     
    Public Delegate Sub FermetureFenetreEvent(ByVal sender As Object)
     
    public class consulIE1...
    {
     
    	Public Event FermetureFenetre As FermetureFenetreEvent
     
    	.......
     
    	// Sur fermeture de ConsulIECS1 (par exemple)
     
    	private sub ConsulIECS1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) 
    		Handles MyBase.Closed
     
    		RaiseEvent FermetureFenetre(me);
     
    	end sub
    	......
    }
     
    // FORM ConsulIE1
     
     
    public class consulIE1...
    {
    .........
     
    	Private WithEvents eventConsulIECS1 As ConsulIECS1
     
     
    	// Ouverture form ConsulIECS1
     
       	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
       		Handles Button1.Click
     
            	Me.Enabled = False
            	Dim f As New ConsulIECS1
     
            	AddHandler f.FermetureFenetre, AddressOf fermerfenetre
            	f.MdiParent = Me.ParentForm
            	f.Show()
        	End Sub
     
    	// appel de l'évenement
     
        	Private Sub fermerfenetre(ByVal sender) Handles eventConsulIECS1.FermetureFenetre
        	    Me.Focus()
        	    Me.Enabled = True
        	    Me.TextBox1.Focus()
        	End Sub
    ......
    }
    lien intéressant sur les delegate http://blogs.microsoft.fr/pascalbe/archive/2004/09/21/227.aspx

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Donner le focus à une form
    Par Jean-Jacques Engels dans le forum Langage
    Réponses: 6
    Dernier message: 23/04/2011, 23h43
  2. rendre une form visible sans lui donner le focus
    Par kchrel dans le forum Access
    Réponses: 4
    Dernier message: 24/01/2006, 15h37
  3. [VB.NET] donner le focus a une page de tableau?
    Par leptityugi dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/11/2005, 13h22
  4. [VB.NET] Perte de focus entre deux form
    Par toniolol dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/07/2005, 08h00
  5. Réponses: 4
    Dernier message: 18/05/2005, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo