الجمعة، 15 يناير 2010

إضافة أدوات بشكل دينميكي في صفحة Dynamically Create Control - ASP.net


 قد تحتاج في بعض الأحيان أن تضيف أدوات أثناء Run Time  و تستخدم بعض الخصائص لهذه الأدوات.
فمثلاً قد تحتاج لأن تضيف TextBox  أو Button  بحسب نتائج سابقة لإختيار المستخدم وغيرها من أمثلة .

في هذه المقالة سأشرح بمثال بسيط الطريقة التي نضيف بها هذه الأدوات و كيف نستخدم قيمها و نربطها بالأحداث Event التي نحتاجها و على أساسها يمكن أن تطلق العنان لمخيلتك في تطبيقها بأي شكل تريد.


قم بفتح مشروع Web Site و أضف صفحة جديدة Web Form ثم من شريط الأدوات  Tool Box قم بسحب أداة PlaceHolder
و أفلتها في الصفحة التي قمت بإضافتها و كذك قم بإضافة أداة ListBox.

PlaceHolder هي عبارة عن أداة تعمل كحاوية للأدوات التي سنضيفها لاحقاً

 
الآن في محرر الكود و في حدث Pagee load  قم بتعريف كلآ من التالي Label,Textbox,Button و أسند الخصائص الخاص بهم
و هذا هو الكود الذي سنكتبه:

For x = 1 To 2


Dim l As New Label 'عرفنا أداة عرض نصوص

Dim t As New TextBox ' عرفنا أداة إدخال النصوص

Dim br As New HtmlGenericControl("br") ' Htmlالتي نستخدمها لنزول سطر في كود<\br>

'نحدد بعض الخصائص لكل أداة

With l

.Text = "name" & x

.ID = "label" & x

End With

With t

.ID = "textbox" & x

.Text = "Test" & x

End With

'هنا نقوم بإضافة هذه الأدوات لأداة التي ستحويها

PlaceHolder1.Controls.Add(l)

PlaceHolder1.Controls.Add(t)

PlaceHolder1.Controls.Add(br)

Next

Dim b As New Button ' عرفنا الزر

'نحدد بعض الخصائص لهذا الزر

With b

.ID = "Button1"

.Text = "click Here To get Value"

End With

'هنا نقوم بإضافة الحدث الذي نريده للزر


' وهو الإجراء الفرعي الذي  قمنا بإنشاءه ButtonClicked

AddHandler b.Click, AddressOf ButtonClicked

'أضفنا الزر للأداة التي ستحويها

PlaceHolder1.Controls.Add(b)
قم الآن بكتابة الإجراء التالي و هو الذي ربطناها سابقاً بزر الذي سنضيفه للصفحة

Public Sub ButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
sender.text = "you clicked me" ' هنا الأداة التي ربطنا الحدث بها sender
' لتغير قيمتها Id هنا أقوم بالبحث عن أحد الأدوات ب
Dim x As TextBox = TryCast(PlaceHolder1.FindControl("textbox1"), TextBox)
x.Text = "hi Programer"
'List أقوم بإيجاد كل الأدوات التي أضفناها للحاوي و أضيف المعرف الخاص به
For Each c As Control In PlaceHolder1.Controls
If TypeOf (c) Is TextBox Then
ListBox1.Items.Add(c.ID & vbTab & " -- " & TryCast(c, TextBox).Text)
Else
ListBox1.Items.Add(c.ID)
End If
Next
End Sub
الآن قم بتشغيل الصفحة  و إذا أردت قم بكتابة أي نص في Text Box


و بعدها إضغط على الزر

 و بهذا نكون قد إنتهينا

هناك تعليق واحد:

  1. السلام عليكم
    كل الشكر على هذا الشرح
    عندي استفسار

    إذا كنت أريد التعامل مع القيم التي أدخلتها في التكست بوكس بجمع قيم جميع التكست بوكس ووضعها في تكست بوكس آخر ماهي الطريقه

    يعطيك العافيه

    ردحذف