PDA

View Full Version : ساخت کنترل ها در زمان اجرا RunTime



ali2914
یک شنبه 06 آذر 1384, 22:09 عصر
سلام .من در حال نوشتن پروژه ای هستم که برای انجام اون نیاز به کمک شما دارم.در برنامه من نیاز هست که در زمان اجرای برنامه تعدادی کنترل از انواع مختلاف مثل TextBox,Button,... به صورت RunTime به فرم اضافه شوند که این کنترلها باید قادر به دریافت رویدادها نیز باشند.
متاسفانه اشکال کار اینجاست که در زمان طراحی تعداد دقیق این کنترلها و نام اونها مشخص نیست و برنامه بایددر زمان اجرا کنترلها یی با نام مناسب تولید کنه.کسی می تونه در این زمینه به من کمک کنه و نمونه برنامه بزاره؟.ممنون .بای

مجتبی کریمی
دوشنبه 07 آذر 1384, 10:08 صبح
سلام
برای اضافه کردن کنترل در زمان اجرا

Dim k As New TextBox
k.Top =10
k.Left = 10
Me.Controls.Add(k)
k.Show()

ali2914
دوشنبه 07 آذر 1384, 10:32 صبح
سلام.ممنون اما مشکل اصلی شناسایی رویدادهای کنترل اضافه شده است و بعد هم اینکه تعداد کنترلهاممکنه خیلی زیاد بشه و نام اونها باید به صورت یک رشته و در زمان اجرا تعیین بشه.

مجتبی کریمی
دوشنبه 07 آذر 1384, 12:32 عصر
سلام
من این راه به نظرم رسید احتمالا روش بهتری هم باشه

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim k As New Button
Static intLocation As Integer
Static intNumber As Integer
intNumber += 1
intLocation += 20
k.Top = intLocation
k.Left = intLocation
k.Name = "Button" & intNumber.ToString
k.Text = "Button" & intNumber.ToString
Me.Controls.Add(k)
k.Show()
AddHandler k.Click, AddressOf Clicked
End Sub

Private Sub Clicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox(sender.name)
End Sub

ali2914
سه شنبه 08 آذر 1384, 20:34 عصر
سلام از جوابتون ممنون خیلی کمک کرد اما هنوز کاملا اون چیزی که من می خواستم نشده.در این برنامه کنترل ساخته شده تنها در روالی که تعریف شده قابل شناسایی است اما من نیاز دارم که کنترل ساخته شده در سابروتینهای دیگر نیز شناخته شده باشد و قابل صدا زدن باشد. آیا راهی برای حل این مشکل وجود داره؟ ممنون.موفق باشید

ali2914
پنج شنبه 10 آذر 1384, 19:48 عصر
...........

titbasoft
پنج شنبه 10 آذر 1384, 22:33 عصر
اگر درست متوجه شده باشم ، خیر این طور نیست ، شما از طریق کالکشن controls در هر فرم دسترسی به تمام کنترل های اون فرم دارید. حتی توی سابروتین های دیگه. مثلا:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim ctrl As Control
For Each ctrl In Me.Controls
MsgBox(ctrl.Name)
Next
End Sub

مرتضی دولتخواه
جمعه 11 آذر 1384, 11:21 صبح
با سلام
شما وقتی در زمان اجرا کنترلی رو به فرم اضافه می کنید ( کاری که دوستان کردن ) ، فقط یک شی در حافظه لود میشه و خلاص. اما برای حساس کردن اون کنترل به عمل خاصی باید آدرس تابع خودتون رو به رویداد خاص از اون کنترل ÷اس کنید ( کمی با دقت بخونید)
برای نمونه :

Private WithEvents [Control Name] As New System.Windows.Forms. [Control Type]

AddHandler [Control Name] . [Event], AddressOf [Function Name]
کد رو ببینید

ali2914
جمعه 11 آذر 1384, 20:07 عصر
سلام.از همتون ممنون.خیلی کمک کردین.پیر شی ننه!
من اگه شماها رو نداشتم چیکار می کردم؟؟؟؟؟؟؟؟؟؟/

علی کلاهدوزان
شنبه 12 آذر 1384, 11:56 صبح
از dim with events استفاده کن

vb8334
چهارشنبه 20 بهمن 1389, 17:19 عصر
سلام به تمامی دوستان

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

من یه سوال داشتم سوالم این بود که در صورتی که مثلآ 20 تا کنترل باشه چیکار باید بکنیم یعنی چجوری به صورت ایندکسی ایجادشون کنیم ؟

ممنون

vb8334
پنج شنبه 21 بهمن 1389, 16:24 عصر
کسی نیست به صوال ما جواب بده؟

shadi khanum
پنج شنبه 21 بهمن 1389, 20:44 عصر
منظورتون از ایندکسی چیه؟!