PDA

View Full Version : سوال: ليست فرمهاي موجود در پروژه



Dariuosh
جمعه 04 مرداد 1387, 10:50 صبح
سلام
چطوري ميتونم يه ليست از فرمهاي موجود در پروژم داشته باشم ؟

راستي
1- My.Forms چون Collection نيست بدردم نيمخوره
2- My.Application.OpenForms فقط ليست فرمهاي باز رو ميده من همه فرمها رو ميخوام
3- از کد زيرم به نتيجه نرسيدم چون تايپ همه چيزايي که برميگردونه System.RuntimeType


Dim MyAssembly As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly
Dim MyTypes As Type() = MyAssembly.GetTypes
For Each mType As Type In MyTypes
If mType.BaseType Is GetType(Form) Then
MessageBox.Show(mType.Name)
End If
Next

علیرضا مداح
جمعه 04 مرداد 1387, 11:47 صبح
سلام دوست عزیز،
ابتدا یک لیست باکس جهت نمایش فهرست فرم ها بر روی فرم قرار دهید ، و سپس :


Imports System.Reflection
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim types As Type() = Assembly.GetExecutingAssembly().GetTypes()
For Each type As Type In types
Dim baseType As Type = type.BaseType
Dim name As String = type.Name
While (Not baseType Is Nothing)
If baseType.Equals(GetType(Form)) Then
ListBox1.Items.Add(name)
Exit While
End If
baseType = baseType.BaseType
End While
Next
End Sub
End Class

Dariuosh
جمعه 04 مرداد 1387, 12:16 عصر
ممنون از توجهتون کد شما هم مشکل منو حل نکرد "System.RuntimeType"يا حداقل من متوجه نشدم
چون اسم فرمها برام مهم نيست
من ميخوام از اونا استفاده کنم يعني بتونم اونا رو به يه ليست از نوع Form اضافه کنم



Public MyForms AsNew List(Of Windows.Forms.Form)

نميدونم تونستم طرح مشکل کنم يا نه

علیرضا مداح
جمعه 04 مرداد 1387, 12:31 عصر
پس شما میخواهید یک Generic List از فرم های پروژه داشته باشید ، کد فوق را بدینصورت تغییر دهید :


Imports System.Reflection
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim myforms As New List(Of Form)
Dim types As Type() = Assembly.GetExecutingAssembly().GetTypes()
For Each type As Type In types
Dim baseType As Type = type.BaseType
Dim name As String = type.FullName
While (Not baseType Is Nothing)
If baseType.Equals(GetType(Form)) Then
myforms.Add(Assembly.GetExecutingAssembly().Create Instance(name))
Exit While
End If
baseType = baseType.BaseType
End While
Next
For Each myform As Form In myforms
ListBox1.Items.Add(myform.Name)
Next
End Sub
End Class

mehrnoosh_al62
چهارشنبه 16 مرداد 1387, 14:49 عصر
با سلام ممنون از کدتون
حالا میشه یه کاری کرد که تو ListBox هر فرمی رو که انتخاب میکنیم کلیه کنترل های اون فرم تو یه ListBox دیگه نشون داده شه؟

Dariuosh
پنج شنبه 17 مرداد 1387, 00:13 صبح
با سلام ممنون از کدتون
حالا میشه یه کاری کرد که تو ListBox هر فرمی رو که انتخاب میکنیم کلیه کنترل های اون فرم تو یه ListBox دیگه نشون داده شه؟
اينطوري مثلاً