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

VB.NET Discussion :

Fenetre deja ouverte ou pas


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut Fenetre deja ouverte ou pas
    Bonjour,

    J'aimerais connaitre la méthode permettant de savoir si une fenêtre est déjà ouverte ou pas ?

    Merci

  2. #2
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Comme cela, je dirais de creer une variable x pour definir si on/off
    on sur le onload et off sur le closing
    Il y a peut etre une methode de base qui permet de la faire, mais je ne la connais pas.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    private frm as monfrm


    (...)


    if frm is nothing orelse frm.isdisposed then c'est pas ouvert
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut Contribution
    La méthode On Off sur chacun des évènements ouvrir et fermer est très intéressante.

    Ayant été confronté à ce problème j'ai utilisé (en C#)
    (NomFenetre)Application.OpenForms["NomFenetre"] ----> entre parenthèses il s'agit d'un cast.
    Ca m'avait bien aidé. Entoure cpendant ceci d'un try catch.

    Je n'ai pas re testé depuis.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2010
    Messages : 97
    Par défaut confusion
    Non non non , plus facile encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim x As New FormAbouts
    x.Show()
     
    For Each c As Form In Application.OpenForms
    if c.name ="FormAbouts" then
    msgbox("Formabouts ouvert")
    exit for
     
    Next

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    il y a aussi la méthode

  7. #7
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Par défaut
    Bonjour,

    Comme ça a été dit :
    Je crois qu'on ne peut toujours pas indicer une variale public, alors on peut prendre une listeBox cachée (sorted = true), donc 1 2 3...
    A chaque fois que tu ouvres une form tu mets son numéro dedans 1, 2, 3...
    A chaque fois que tu fermes une form tu enlèves son numéro de la liste.
    A chauqe fois que tu veux savoir tu lis la liste, c'est dedans = ouvert

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par Ehjoe Voir le message
    Bonjour,

    Comme ça a été dit :
    Je crois qu'on ne peut toujours pas indicer une variale public, alors on peut prendre une listeBox cachée (sorted = true), donc 1 2 3...
    A chaque fois que tu ouvres une form tu mets son numéro dedans 1, 2, 3...
    A chaque fois que tu fermes une form tu enlèves son numéro de la liste.
    A chauqe fois que tu veux savoir tu lis la liste, c'est dedans = ouvert
    merci d'éviter ce genre d'idiotie sur ce forum
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    merci d'éviter ce genre d'idiotie sur ce forum
    Le Cerf,

    A piori tu ne sais pas te servir des objets, tu dois t'y habituer, dans la progammation objet il faut penser à utiliser les objets...

    Je le fait régulièrement, ça marche très bien et c'est une bonne solution d'utilisation des objets.

    Où est ton problème, tente de t'expliquer ?

    Citation Envoyé par Pol63 Voir le message

    private frm as monfrm
    (...)
    if frm is nothing orelse frm.isdisposed then c'est pas ouvert

    Le cerf t'es un incapable !

    Pour lire depuis plusieurs form il faut utilise "PUBLIC" !

  10. #10
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Je pense reellement que la meilleure methode est celle de ADBows.
    Application.OpenForms retourne une collection de tous les formulaires ouverts de l'application.

    J'ai meme trouve ce code sur msdn qui effectue une boucle sur les formulaires ouverts de l'application et affiche leurs titres dans un contrôle ListBox.
    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
    Private Sub GetOpenFormTitles()
    Dim formTitles As New Collection
          Try
             For Each f As Form In My.Application.OpenForms
                 ' Use a thread-safe method to get all form titles.
                 formTitles.Add(GetFormTitle(f))
             Next
         Catch ex As Exception
             formTitles.Add("Error: " & ex.Message)
         End Try
    
         Form1.ListBox1.DataSource = formTitles
    End Sub
    
    Private Delegate Function GetFormTitleDelegate(ByVal f As Form) As String
    
    Private Function GetFormTitle(ByVal f As Form) As String
         ' Check if the form can be accessed from the current thread.
    
         If Not f.InvokeRequired Then
             ' Access the form directly.
             Return f.Text
         Else
             ' Marshal to the thread that owns the form.
             Dim del As GetFormTitleDelegate = AddressOf GetFormTitle
             Dim param As Object() = {f}
             Dim result As System.IAsyncResult = f.BeginInvoke(del, param)
             ' Give the form's thread a chance process function.
             System.Threading.Thread.Sleep(10)
             ' Check the result.
    
             If result.IsCompleted Then
                 ' Get the function's return value.
                 Return "Different thread: " & f.EndInvoke(result).ToString
             Else
                 Return "Unresponsive thread"
             End If
         End If
    
    End Function

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par Ehjoe Voir le message
    A piori tu ne sais pas te servir des objets, tu dois t'y habituer, dans la progammation objet il faut penser à utiliser les objets...

    Je le fait régulièrement, ça marche très bien et c'est une bonne solution d'utilisation des objets.

    Où est ton problème, tente de t'expliquer ?
    ce qui me dérange c'est ca :

    Citation Envoyé par Ehjoe Voir le message
    on peut prendre une listeBox cachée (sorted = true), donc 1 2 3...
    A chaque fois que tu ouvres une form tu mets son numéro dedans 1, 2, 3...
    prendre une listbox si c'est pour ne pas l'afficher c'est strictement idiot, il y a des collections
    ensuite mettre le numéro du form ... toi tu laisses form1 form2 etc si tu veux mais ce n'est pas quelque chose d'intelligent



    Citation Envoyé par Ehjoe Voir le message
    Le cerf t'es un incapable !

    Pour lire depuis plusieurs form il faut utilise "PUBLIC" !
    pour lire depuis plusieurs form certes mais rien n'est dit en ce sens
    pour reprendre la question de départ :
    Citation Envoyé par toutounesan Voir le message
    J'aimerais connaitre la méthode permettant de savoir si une fenêtre est déjà ouverte ou pas ?
    déjà, question qui manque de précision (à partir d'où ? ouverte = existante non visible ? visible ? ...)

    si on part sur l'hypothèse d'un form principal qui avec un bouton doit ouvrir une fenêtre, mais en instance unique, et que cette forme n'est pas gardée en mémoire invisible, ma solution reste la mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private _frm as frmmachin
     
    sub button_click
      if _frm is nothing orelse _frm.isdisposed then
         _frm = new frmmachin
      end if
       _frm.show
    end sub
    un booléen c'est limite de la redondance, et ca reste buggable sans try/finally ^^
    openforms, éventuellement, avec un dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim instance =  (from f as form in openforms select f).oftype(of frmmachin)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Comment ne plus ouvrir une fenetre deja ouverte
    Par shallum dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 21/02/2010, 17h48
  2. Prendre le controle d'une fenetre IE deja ouverte
    Par andrebernard dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/05/2009, 19h20
  3. [C# V1.1]Detecter si un fichier est deja ouvert ou pas !
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/10/2006, 09h54
  4. Detecter si un Fichier est deja ouvert
    Par Didier Derain dans le forum C++Builder
    Réponses: 8
    Dernier message: 25/02/2005, 19h27
  5. [VBA-E] Macro ouverture fichier déja ouvert
    Par bhaal76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 14h30

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