ساخت يك كنترل در زمان اجراگاهي از اوقات در برنامه احتياج هست که يک کنترل ( براي مثال يک Button يا يک Image ) را در هنگام اجرا بوجود آوربد . اين کار در vb6 با استفاده از توابع API صورت مي گرفت ولي در VB.NET اين کار را به راحتي آب خوردن مي توان درون برنامه انجام داد
ساخت يك كنترل در زمان اجرا
گاهي از اوقات در برنامه احتياج هست که يک کنترل ( براي مثال يک Button يا يک Image ) را در هنگام اجرا بوجود آوربد . اين کار در vb6 با استفاده از توابع API صورت مي گرفت ولي در VB.NET اين کار را به راحتي آب خوردن مي توان درون برنامه انجام داد.
در .NET کافيست که يه نمونه از کنترل مورد نظر را در حافظه تعريف کنيد و بعد از تنطيم خصوصيات با استفاده از متد Controls.Add() آن را روي فرم ظاهر کنيد.
براي مثال يک نمونه از Button اينگونه ساخته مي شود:
کد:
Dim btn As New Button()
With btn
.Text = "Created at Run time"
.Width = 150
.Height = 20
.Location = New Point(100, 200)
End With
Me.Controls.Add(btn)
تا اينجا دکمه ساخته شده و روي فرم قرار گرفته است ، ولي چگونه مي توان براي رويدادهاي اين دکمه نيز برنامه نوشت؟
براي اين منظور ابتدا بايد يک روال براي رويداد مورد نظر و با همان پارامترهايي که براي يک دکمه معمولي بکار مي رود نوشت ، براي مثال رويداد کليک يک دکمه :
کد:
Sub onclick(ByVal sender As Object, ByVal e As EventArgs)
End Sub
و سپس اين رويداد را به روال مورد نظر نسبت مي دهيم به صورت زير :
AddHandler رويداد مربوط به کنترل, AddressOf نام روال نوشته شده براي رويداد
براي مثال:
کد:
AddHandler btn.Click, AddressOf onclick
با استفاده از دستور RemoveHandler مي توان ارتباط ميان رويداد و کنترل را از ميان برداشت. براي مثال:
کد:
RemoveHandler btn.Click, AddressOf onclick
با دستور Me.Controls.Remove() نيز مي توانيد يک کنترل را در زمان اجرا از فرم حذف کنيد.
در مثال زير ابتدا دکمه اي را در حافظه تعريف کرده و سپس به کنترل هاي روي فرم اضافه مي کند ، با يک روال نيز در رويداد کليک مي گوئيم که کادر پيام با مضمون کليک شدن روي دکمه ظاهر گردد و در پايان نيز دکمه مورد نظر را حذف مي کنيم:
کد:
Dim btn As New Button()
Overloads Sub onclick(ByVal sender As Object, ByVal e As EventArgs)
MsgBox("You Click :" & CType(sender, Button).Text)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
With btn
.Text = "Created at Run time"
.Width = 170
.Height = 20
.Location = New Point(100, 200)
End With
AddHandler btn.Click, AddressOf onclick
Me.Controls.Add(btn)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
RemoveHandler btn.Click, AddressOf onclick
Me.Controls.Remove(btn)
End Sub
براي مشكلات بن بستي نيست ؛ يا راهي خواهيم يافت يا راهي خواهيم ساخت .