Bonjour,
J'aimerais connaitre la méthode permettant de savoir si une fenêtre est déjà ouverte ou pas ?
Merci
Bonjour,
J'aimerais connaitre la méthode permettant de savoir si une fenêtre est déjà ouverte ou pas ?
Merci
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.
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.
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
il y a aussi la méthode
Code : Sélectionner tout - Visualiser dans une fenêtre à part created()
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
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 ?
Le cerf t'es un incapable !
Pour lire depuis plusieurs form il faut utilise "PUBLIC" !
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
ce qui me dérange c'est ca :
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
pour lire depuis plusieurs form certes mais rien n'est dit en ce sens
pour reprendre la question de départ :
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
un booléen c'est limite de la redondance, et ca reste buggable sans try/finally ^^
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
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)
Partager