PDA

View Full Version : مقاله: ایجاد شئ در زمان اجرای برنامه



Mani_rf
دوشنبه 01 تیر 1388, 16:33 عصر
سلام.

برای اطلاع دوستانی که می خوان در زمان اجرا شئ بسازن من یک مثال ساده آماده کردم، فکر کردم خالی از لطف نباشه به عنوان یک تاپیک تو سایت قرار بدم.

البته می دونم اگر بگردن حتما مثالهای خوبی پیدا می کنن اما من یک جورایی جم و جورش کردم.

اگر دوستان فکر می کنن چیزی کم و کثر داره لطفا اضافه کنن تا ما و دیگر دوستان هم استفاده کنیم

مواد لازم :
متغیر آرایه ای داینامیک از نوع Object مورد نظر به تعداد لازم .
مختصات دهی برای صحیح برای شئ جدید.
تخصیص عملکر مورد نظر به شئ ایجاد شده.

در نمونه برنامه زیر چند دکمه در زمان اجرا ایجاد می شوند و با کلیک بر روی هر کدام عنوان آن برگشت داده می شود.

ابتدا به یک متغیر از نوع شئ مورد نظر که اینجا Button است نیاز داریم که بتوانیم تعداد آن را به دلخواه کم و زیاد کنیم.

برای تعریف آن در قسمت عمومی فرم آرایه ای بدون تعداد از نوع Button تعریف می کنیم .


Public B() As Button


در مرحله بعد، در قسمتی که می خواهیم Button ها ایجاد شود به این صورت کد نویسی می کنیم (من اینجا تو Form Load نوشتم اگر می خواهید در زمان دیگری Button ها ایجاد شود در Event شئ دلخواه بنویسید)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

با این فرمان ما تعداد آرایه b را به تعداد 5 عنصر تغییر می دهیم. ReDim B(5)


در قسمت بعد ما به یک حلقه نیاز داریم تا 5 دکمه ما را برای ما ایجاد کند. که من آن را به این شکل نوشتم :


از از اولین عنصر آرایه تا آخرین For I As Byte = 0 To B.GetUpperBound(0)


چون Button جزو کلاس های VB.net است باید در قسمت بعد باید با کلمه کلیدی New آن را بارگذاری کنیم.(I اندیس دکمه ای که قرار است عملیات بر روی آن انجام شد را به ما می دهد.)


B(I) = New Button

از این قسمت شروع می کنیم به تعریف خواص شئ مان.

تعیین اندازه شئ.(من آنرا از کنترل قبلی گرفتم) B(I).Size = Button1.Size

تعیین مکان قرار گیری دکمه If I = 0 Then
B(I).Location = New Point(Button1.Left, Button1.Top + Button1.Height + 10)
Else
B(I).Location = New Point(B(I - 1).Location.X, B(I - 1).Location.Y + B(I -1).Size.Height + 10)
End If

در اینجا من یک دکمه به صورت پیش فرض بر روی فرم اصلی قرار داده ام و مختصات اولین دکمه را به نسبت آن محاسبه کردم. و مابقی را به نسبت قبلی هرکدام.


تعیین عنوان دکمه B(I).Text = "دکمه شماره " & I

مابقی خواصی را که می خواهید تغییر دهید از جمله رنگ ، فونت و ... را نیز در همین قسمت باید مشخص کنید.



در مرحله بعدی باید دکمه ساخته شده را به فرم اضافه کنیم. پس:

Me.Controls.Add(B(I))

توجه : در صورتی که می خواهید دکمه به یک Group Box یا یک Panel اضافه شود بجای Me باید نام آنرا بنویسید.
تا این قسمت دکمه ها ساخته می شوند با اجرای برنامه بر روی فرم دیده می شوند اما بعد از کلیک شدن بر روی آنها هیچ اتفاقی نمی افتد.
برای اضافه کردن Event به دکمه های ابتدا باید یک Sub بنویسیم که موقع زده شدن دکمه آن فراخوانی شود، و یا از رویداد های آماده اشیاء دیگر استفاده کنیم.(دومیش راحت تره)

من روی فرمم یک باتن گذاشتم و رویداد Click آن را به این صورت تعریف کردم.



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(DirectCast(sender, Button).Text)
End Sub


DirectCast(sender, Button).Text باعث می شود تا خاصیت Text دکمه فشرده شده خوانده شود. همه خواص دکمه را از این طریق می توانید به کار گیرید. توجه کنید که اگر می خاهید کنترل دیگری را ایجاد کنید به جای Button نوع آن را بنویسید.

تا اینجا ما عملی که انجام شود را هم مشخص کردیم.
به ادامه حلقه For بر می گردیم و این کد را می نویسیم :

AddHandler B(I).Click, AddressOf Button1_Click



این کد رویداد کلیک Button1 مان را به رویداد کلیک B(I) نسبت می دهد.
و در انتها هم حلقه را می بندیم.

Next


این هم از کد کامل :
امیدوارم مطلب مفیدی بوده باشد.





Public Class Form1

Public B() As Button

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ReDim B(5)

For I As Byte = 0 To B.GetUpperBound(0)
B(I) = New Button
B(I).Size = Button1.Size

If I = 0 Then
B(I).Location = New Point(Button1.Left, Button1.Top + Button1.Height + 10)
Else
B(I).Location = New Point(B(I - 1).Location.X, B(I - 1).Location.Y + B(I - 1).Size.Height + 10)
End If

B(I).Text = "دکمه شماره " & I

Me.Controls.Add(B(I))

AddHandler B(I).Click, AddressOf Button1_Click
Next
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(DirectCast(sender, Button).Text)
End Sub
End Class





نمونه برنامه را هم تو از این صفحه می توانید دانلود کنید :

http://barnamenevis.org/forum/showthread.php?p=743422#post743422
(http://barnamenevis.org/forum/showthread.php?p=743422#post743422)

تو این برنامه که لینکش ای پایین تو امضام هست تو قسمت فروش روزارنش از چنین روشی استفاده کردم. البته یک کم پیشرفته تر. اگر خواستید دانلود کنید ببیند.



موفق باشید...
:لبخند: