PDA

View Full Version : چطور میشه یه تابع از آایجاد کرد که خروجیش به شکل آرایه باشه؟



mehrnoosh_al62
چهارشنبه 30 مرداد 1387, 12:47 عصر
سلام دوستان
من یه تابع دارم که میخوام اونو به یه تابع از آرایه تبدیل کنم که خروجیش به صورت آرایه ای از form ها باشه. میشه کمکم کنید... حتما باید آرایه باشه..

تابع به شکل زیره:


PublicFunction ReturnForms() As List(Of Form)
Dim myforms AsNew List(Of Form)
Dim types As Type() = Assembly.GetExecutingAssembly().GetTypes()
ForEach type As Type In types
Dim baseType As Type = type.BaseType
Dim name AsString = type.FullName
While (Not baseType IsNothing)
If baseType.Equals(GetType(Form)) Then
myforms.Add(Assembly.GetExecutingAssembly().Create Instance(name))
ExitWhile
EndIf
baseType = baseType.BaseType
EndWhile
Next
ReturnForms = myforms
EndFunction

HadiVB
چهارشنبه 30 مرداد 1387, 15:47 عصر
من دقیق متوجه نشدم اما :
Array ها فقط توانایی دریافت Stringو.. هستن فکر نمی کنم بتونی یک لیست از object داشته باشی
بهترین راه ذخیره اسم form ها است

mehrnoosh_al62
چهارشنبه 30 مرداد 1387, 16:12 عصر
نه. این تابع که گذاشتم درست کار میکنه و یه لیست از نام کل فرم هایی که در برنامه هست رو میده. اما خروجیش به شکل لیسته و من میخوام اونو به آرایه تبدیل کنم

Dariuosh
چهارشنبه 30 مرداد 1387, 16:12 عصر
هدفت از Function کردن اين کد چيه ؟

Dariuosh
چهارشنبه 30 مرداد 1387, 16:13 عصر
نه. این تابع که گذاشتم درست کار میکنه و یه لیست از نام کل فرم هایی که در برنامه هست رو میده. اما خروجیش به شکل لیسته و من میخوام اونو به آرایه تبدیل کنم
مشکلت با ليست چيه ؟

mehrnoosh_al62
چهارشنبه 30 مرداد 1387, 16:25 عصر
خوب راستش چند بار تو برنامم مجبورم از لیست فرم ها استفاده کنم. ترجیح دادم به شکل تابع بنویسم تا هر بار فقط لیستو فراخوانیش کنم...

mehrnoosh_al62
چهارشنبه 30 مرداد 1387, 16:30 عصر
مشکلت با ليست چيه ؟

راستشو بخواید من دارم یه برنامه مینویسم که سطح دسترسی کاربر به کنترل های فرم رو محدود میکنه. وقتی لیست رو فراخوانی میکنم هیچ تغییری تو برنامم نمیبینم فکر کردم شاید اگه آرایه ای از فرم ها داشته باشم جواب بده. در مورد این مشکل هم همین امروز یه تاپیک (http://barnamenevis.org/forum/showthread.php?t=118660)گذاشتم که جواب نگرفتم تا حالا. اگه تاپیکمو ببینید متوجه مشکلم میشید..

Dariuosh
چهارشنبه 30 مرداد 1387, 16:43 عصر
خوب راستش چند بار تو برنامم مجبورم از لیست فرم ها استفاده کنم. ترجیح دادم به شکل تابع بنویسم تا هر بار فقط لیستو فراخوانیش کنم...
ميتوني اين کدو تو MyApplication_Startup بذاري بعد هر موقع که دوست داشتي MyForms که ليستي از همه فرمهات هست رو صدا کني

mehrnoosh_al62
چهارشنبه 30 مرداد 1387, 16:45 عصر
ميتوني اين کدو تو MyApplication_Startup بذاري بعد هر موقع که دوست داشتي MyForms که ليستي از همه فرمهات هست رو صدا کني
ببخشید که این سوالو میپرسم :خجالت:ولی MyApplication_Startup کجاست؟ بعد تابع رو باید اونجا قرار بدم...؟

Dariuosh
چهارشنبه 30 مرداد 1387, 16:54 عصر
ببخشید که این سوالو میپرسم :خجالت:ولی MyApplication_Startup کجاست؟ بعد تابع رو باید اونجا قرار بدم...؟
Project --> Properties --> Application --> View Application Event

Dariuosh
چهارشنبه 30 مرداد 1387, 17:00 عصر
اينو بزار تو همون Application Event


Public MyForms As New List(Of Form)
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupE ventArgs) Handles Me.Startup

Dim types As Type() = Reflection.Assembly.GetExecutingAssembly().GetType s()
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(Reflection.Assembly.GetExecutingAssemb ly().CreateInstance(name))
Exit While
End If
baseType = baseType.BaseType
End While
Next

End Sub


با اين کار اول برنامه يه ليست از همه فرمها درست ميشه و ميتوني هر جا خاستي ازش استفاده کني