PDA

View Full Version : [VB] Non aprire un altro Form se un altro e' gia' aperto...


race2
16-01-2003, 14:48
Su VB.NET,

Per non aprire piu' form gia aperti in un Form Madre "IsMdiContainer" faccio questo:


Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick
Select Case ToolBar1.Buttons.IndexOf(e.Button)
Case 0
Dim searchForm As New Form()
Dim Result As Boolean
Result = False
For Each searchForm In Me.MdiChildren
If searchForm.Name = "Anagrafica" Then
searchForm.Activate()
Result = True
Exit For
End If
Next
If Not Result Then
Dim Form As New Anagrafica()
Form.MdiParent = Me
Form.Show()
End If
End Select
End Sub


solo che funzionava fino ad ora su un altro progetto e qui non funziona piu' , il progetto e'' completamente identico, mi date un occhiata al codice ???

Oppure avete un altro metodo ???

bsummer
16-01-2003, 15:59
Premetto che non conosco .NET.

Tuttavia io proverei con un controllo sulla proprieta' "visible" del form stesso (penso esista anche in .NET...).

If form1.visible = false then
form1.visible = true
end if

Che dici, puo' andare ?

race2
16-01-2003, 16:09
e lo metteresti allinterno del ciclo For Each ???

For Each searchForm In Me.MdiChildren


If form1.visible = false then
form1.visible = true
end if


Next

bsummer
16-01-2003, 16:15
Beh, no.

Avendo ogni form un suo nome ben preciso, ad esempio "anagrafica" potrebbe avere nome "frmAnagr", basterebbe fare il controllo su tale form, senza ricercarlo tra tutti quelli presenti. Quindi niente for.

Questo in Vb, in .NET no so...

Aloha

tas
17-01-2003, 07:58
VB.NET è un linguaggio ad oggetti, a differenza di quello che è VB6.0. Di conseguenza, non è possibile riferirsi direttamente ad un form attraverso il suo nome di classe, ma è necessario iterare tra tutti i form e cercare quello voluto.
Ho preso il tuo codice è l'ho adattato in un nuovo progetto senza fare grosse modifiche, utilizzando Form1 come MDI-container e Form2 come MDI-child:

Dim searchForm As Form 'niente new qui!
Dim Result As Boolean

Result = False

For Each searchForm In Me.MdiChildren
If TypeOf searchForm Is Form2 Then 'oppure
'If searchForm.Name = "Form2" Then
searchForm.Activate()
If searchForm.WindowState = FormWindowState.Minimized Then
searchForm.WindowState = FormWindowState.Normal
End If
Result = True
Exit For
End If
Next

If Not Result Then
Dim f As New Form2()
f.MdiParent = Me
f.Show()
End If


ciao

race2
17-01-2003, 08:09
Ma come non e' un linguaggio ad oggetti ???

Non ci posso credere...!!!

per il mio problema ho risolto in questo modo:


Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick
Select Case ToolBar1.Buttons.IndexOf(e.Button)
Case 0
Dim searchForm As Form
Dim Result As Boolean
Result = False
For Each searchForm In Me.MdiChildren
If searchForm.Name = "Anagrafica" Then
searchForm.Activate()
Result = True
Exit For
End If
Next
If Not Result Then
Dim Form As New Anagrafica()
Form.MdiParent = Me
Form.Show()
End If
End Select
End Sub


Grazie mille ugualmente, ciao!!