Καλησπέρα,
Ψάχνω στο διαδίκτυο τις τελευταίες μέρες να βρω τρόπο με τον οποίο μπορώ να περάσω σε μια μεταβλητή τύπου form() όλες τις φόρμες που έχει το πρόγραμμά μου και ταυτόχρονα τα ονόματα αυτών σε ένα combobox.
Διαλέγοντας μια φόρμα από το combo box θα εμφανίζονται όλα τα ονόματα των controls της εκάστοτε φόρμας σε ένα άλλο combobox. Για αυτή την κίνηση ξέρω τη να κάνω. Δηλαδή μπορώ να αντλήσω όλα ta controls μιας φόρμας και να τα περάσω σε combobox.
Αυτό που δεν μπορώ να κάνω είναι να βρω όλες τις φόρμες.. Εύκολα βρίσκεις όλες τις ανοιχτές φόρμες αλλά δεν αρκεί.
Με την έρευνά μου έχω βρει διάφορες θεωρίες.. και έχω δοκιμάσει διάφορους κώδικες, οι τελευταίοι εκ των οποίων είναι:
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
| Private Sub frmSkinCreator_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Try
Dim Count As Integer = -1
Dim Forms() As Form
Dim formType As Type = Type.GetType("System.Windows.Forms.Form")
For Each t As Type In sender.GetType().Assembly.GetTypes()
If Not IsNothing(t.BaseType) AndAlso UCase(t.BaseType.ToString) = "SYSTEM.WINDOWS.FORMS.FORM" Then
'cbSelForms.Items.Add(t.Name)
Count += 1
ReDim Preserve Forms(Count)
Forms(Count) = DirectCast(getfromFromName(t.Name), Form)
MsgBox(DirectCast(getfromFromName(t.Name), Form).Name)
End If
Next
MsgBox(Forms(0))
'MsgBox(Forms.Count)
'For i = 0 To Forms.Count - 1
' MsgBox(Forms(i).Name)
'Next
'For Each frm As Form In Forms
' 'If TypeOf frm Is Form Then
' cbSelForms.Items.Add(frm.Name)
' 'End If
'Next
Catch ex As Exception
MsgBox(ex.ToString)
CreateCrushFile(ex.ToString)
End Try
End Sub |
Το πρώτο που έχω commented-out δουλεύει, και πράγματι μου περνά τα ονόματα όλων των form στο combobox, αλλά δεν με αφήνει να περάσω τις ίδιες τις forms σε μεταβλητή ώστε να μπορώ να αντλήσω τα controls του απο εκεί....
γιατί θα πρέπει μετά να γράψω κάτι του τύπου:
1
2
3
4
5
6
7
8
9
10
| Public Sub Όνομα(ByVal frm As Form)
With frm
For Each MainCtrl As Control In .Controls
If TypeOf MainCtrl Is ............
ElseIf TypeOf MainCtrl Is ............
και τα λοιπά.. |
Άρα η ερώτησή μου είναι..
πως τελικά να περάσω όλες τις φόρμες του προγράμματος σε μια μεταβλητή? για να κάνω όλο αυτό??
και μια ρητορική ερώτηση.. γιατί δεν μπορούσε να ήταν τόσο απλό όσο ένα "For Each frm as Form in Forms" ???