20
ﺷﺮﻛﺖ ﭘﻴﺸﮕﺎﻣﺎﻥ ﻓﻨﺎﻭﺭﻱ ﻛﻠﻴﻪ ﺣﻘﻮﻕ ﺍﻳﻦ ﺟﺰﻭﻩ ﺁﻣﻮﺯﺷﻲ ﻣﺘﻌﻠﻖ ﺑﻪ ﺳﺎﻳﺖ ﺁﻣﻮﺯﺵ ﺍﻟﻜﺘﺮﻭﻧﻴﻜﻲ ﭘﺮﺷﻴﺎ ﻣﻴ ﺒﺎﺷﺪ ﺟﺰﻭﻩ ﺁﻣﻮﺯﺷﻲ ﻛﻼﺱASP.NET ﭘﻴﺸﺮﻓﺘﻪ ﺍﺳﺘﺎﺩ ﺩﻭﺭﻩ: ﻭﺣﻴﺪ ﻧﺼﻴﺮﻱ) [email protected] ( ﻓﺼﻞ ﭘﻨﺠﻢ: ﺍﻳﺠﺎﺩ ﻭ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯCustom Controls ) ﻗﺴﻤﺖ ﺩﻭﻡ( ﻣﻘﺪﻣﻪ: ﺑﺠﺎﻱ ﺍﻳﺠﺎﺩ ﻇﺎﻫﺮ ﻛﻨﺘﺮﻝ ﻫﺎ ﺍﺯ ﻃﺮﻳﻖ ﺑﻜﺎﺭ ﮔﻴﺮﻱ ﻛﻨﺘﺮﻝ ﻫﺎﻱ ﻣﻮﺟﻮﺩ ، ﻣﻲ ﺗﻮﺍﻥ ﻛﻨﺘﺮﻝ ﻫﺎﻱ ﺭﻧـﺪﺭ ﺷـﺪﻩ ﺍﻱ ﭘﺪﻳﺪ ﺁﻭﺭﺩ ﻛﻪ ﻇﺎﻫﺮ ﺧﻮﺩﺷﺎﻥ ﺭﺍ ﺍﺯ ﻃﺮﻳﻖ ﺗﮓ ﻫﺎﻱHTML ﻭ ﻋﻨﺎﺻﺮ ﺁﻥ ﺑﻮﺟﻮﺩ ﻣﻲ ﺁﻭﺭﻧﺪ ، ﺑﻨﺎﺑﺮﺍﻳﻦ ﺩﻳ ﮕـﺮ ﻳﻚ ﺳﺮﻱ ﺧﻮﺍﺹ ، ﻣﺘﺪﻫﺎ ﻭ ﺭﺧﺪﺍﺩﻫﺎﻱ ﺍﺯ ﭘﻴﺶ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺑﺮﺍﻱ ﻣﺎ ﻣﻬﻴﺎ ﻧﻴﺴﺖ ﻭ ﺗﻤﺎﻡ ﺁﻧﻬﺎ ﺭﺍ ﺑﺎﻳﺪ ﺧﻮﺩﻣﺎﻥ ﺍﻳﺠﺎﺩ ﻛﻨﻴﻢ. ﺍﻳﺠﺎﺩ ﻳﻚ ﻛﻨﺘﺮﻝ ﺭﻧﺪﺭ ﺷﺪﻩ: ﻣﺮﺍﺣﻞ ﺍﻳﺠﺎﺩ ﻳﻚ ﻛﻨﺘﺮﻝ ﺭﻧﺪﺭ ﺷﺪﻩ) ﺍﻟﺒﺘﻪ ﺗﻌﺪﺍﺩﻱ ﺍﺯ ﺁﻧﻬﺎ ﺩﺭ ﻓﺼﻞ ﻗﺒﻞ ﻧﻴﺰ ﻣﺮﻭﺭ ﺷﺪﻧﺪ( : ۱ - ﺍﻳﺠﺎﺩ ﻳﻚ ﭘﺮﻭﮊﻩ ﻱ ﺟﺪﻳﺪ ﺣﺎﻭﻱcustom control project ۲ - ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﻳﻚ ﭘﺮﻭﮊﻩ ﻱ ﻭﺏ ﺍﭘﻠﻴﻜﻴﺸﻦ ﺟﺪﻳﺪ ﺑﻪ ﭘﺮﻭﮊﻩ ﺟﺎﺭﻱ ﻭ ﺗﻨﻈﻴﻢ ﺁﻥ ﺑﻌﻨـﻮﺍﻥ ﭘـﺮﻭﮊﻩ ﻱ ﺁﻏـﺎﺯ ﻛﻨﻨﺪﻩ ﻱ ﺑﺮﻧﺎﻣﻪ ، ﺍﺯ ﺍﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺑﺮﺍﻱ ﺗﺴﺖ ﻛﺮﺩﻥ ﻛﻨﺘﺮﻝ ﺳﻔﺎﺭﺷﻲ ﺩﺭ ﺧﻼﻝ ﺗﻮﺳﻌﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ.

Microsoft Word - advch_05

Embed Size (px)

DESCRIPTION

۱ - ‫ﺣﺎﻭﻱ‬ ‫ﺟﺪﻳﺪ‬ ‫ﻱ‬ ‫ﭘﺮﻭﮊﻩ‬ ‫ﻳﻚ‬ ‫ﺍﻳﺠﺎﺩ‬ custom control project ۲ - ‫ﺁﻏـﺎﺯ‬ ‫ﻱ‬ ‫ﭘـﺮﻭﮊﻩ‬ ‫ﺑﻌﻨـﻮﺍﻥ‬ ‫ﺁﻥ‬ ‫ﺗﻨﻈﻴﻢ‬ ‫ﻭ‬ ‫ﺟﺎﺭﻱ‬ ‫ﭘﺮﻭﮊﻩ‬ ‫ﺑﻪ‬ ‫ﺟﺪﻳﺪ‬ ‫ﺍﭘﻠﻴﻜﻴﺸﻦ‬ ‫ﻭﺏ‬ ‫ﻱ‬ ‫ﭘﺮﻭﮊﻩ‬ ‫ﻳﻚ‬ ‫ﻛﺮﺩﻥ‬ ‫ﺍﺿﺎﻓﻪ‬ ‫ﻫﺎﻱ‬ ‫ﺗﮓ‬ ‫ﻃﺮﻳﻖ‬ ‫ﺍﺯ‬ ‫ﺭﺍ‬ ‫ﺧﻮﺩﺷﺎﻥ‬ ‫ﻇﺎﻫﺮ‬ ‫ﻛﻪ‬ ‫ﺁﻭﺭﺩ‬ ‫ﭘﺪﻳﺪ‬ HTML ‫ﺩﻳ‬ ‫ﺑﻨﺎﺑﺮﺍﻳﻦ‬ ، ‫ﺁﻭﺭﻧﺪ‬ ‫ﻣﻲ‬ ‫ﺑﻮﺟﻮﺩ‬ ‫ﺁﻥ‬ ‫ﻋﻨﺎﺻﺮ‬ ‫ﻭ‬ ‫ﮕـﺮ‬

Citation preview

Page 1: Microsoft Word - advch_05

1

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

:پنجمفصل

Custom Controlsايجاد و استفاده از )دومقسمت (

:مقدمه

بجاي ايجاد ظاهر كنترل ها از طريق بكار گيري كنترل هاي موجود ، مي توان كنترل هاي رنـدر شـده اي گـر و عناصر آن بوجود مي آورند ، بنابراين دي HTMLپديد آورد كه ظاهر خودشان را از طريق تگ هاي

يك سري خواص ، متدها و رخدادهاي از پيش تعريف شده براي ما مهيا نيست و تمام آنها را بايد خودمان .ايجاد كنيم

:ايجاد يك كنترل رندر شده

:)البته تعدادي از آنها در فصل قبل نيز مرور شدند ( مراحل ايجاد يك كنترل رندر شده custom control projectايجاد يك پروژه ي جديد حاوي -۱اضافه كردن يك پروژه ي وب اپليكيشن جديد به پروژه جاري و تنظيم آن بعنـوان پـروژه ي آغـاز -۲

.كننده ي برنامه ، از اين برنامه براي تست كردن كنترل سفارشي در خالل توسعه استفاده مي شود

Page 2: Microsoft Word - advch_05

2

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

و المان هـا و Registerاضافه كردن ريفرنس به كنترل سفارشي در وب اپليكيشن و اضافه نمودن -۳ .تگ هاي كنترل براي استفاده كردن از آن بر روي يك وب فرم

.Renderايجاد ظاهر ويژوال كنترل سفارشي با تحريف كردن متد -۴ .set و getنوشتن كد براي ارائه دادن خواص -۵

:ظاهر ويژوال براي كنترل هاي رندر شده ايجاد

را تحريـف كـرد و از طريـق Renderر شـده مـي تـوان متـد براي ايجاد ظاهر ويژوال كنترل هـاي رنـد HTMLTextWriterآنرا نمايش داد .HTMLTextWriterدر جدول زير بررسي شده است :

HTMLTextWriter متدهاي -۱جدول

توضيح متدAddAttribute خواصHTML را به المان بعدي HTMLبراي رندر شدن اضافه مي كند .

RenderBeginTag گ آغازين المان تHTML از آن بوسـيله ي متـد و را رندر مي كند WriteLine .استفاده خواهد شد

RenderEngTag تگ پاياني المانHTML تمـام . را رندر كرده و المان را نوشته و تكميل مي كنـد .خواص رندر شده بعد از فراخواني اين تابع خلق مي شوند

Write بالدرنگ يك رشته را مي نويسد. WriteAttribute بالدرنگ يك خاصيتHTMLرا مي نويسد . WriteBeginTag بالفاصله تگ آغازين المانHTMLرا مي نويسد . WriteEndTag باالفاصله تگ انتهايي يك المانHTMLرا مي نويسد .

WriteFullBeginTag المان ) <(راه براكت پايان مبالفاصله تگ آغازين به هHTMLد را مي نويس. WriteLine معـادل اسـت بـا متـد . بالفاصله يك خط از محتويات را مـي نويـسدWrite امـا

WriteLineيك كاراكتر خط جديد را نيز اضافه مي كند .

Page 3: Microsoft Word - advch_05

3

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

پـر . وجـود دارنـد HTML مشاهده مي شود دو روش براي نوشـتن المانهـاي ۱ همانطور كه در جدول

ــد ــرين روش ، اســتفاده از مت ــراي اضــافه كــردن Writeاســتفاده ت ــه HTML ب ــه صــورت مــستقيم ب بHTMLTextWriterاست .

:۱مثال

را هنگاميكه كاربر روي آن كليك مي كنـد MessageBoxمثال زير يك دكمه را ايجاد كرده و سپس يك .نمايش مي دهد

صـورت خودكـار كد درون كالس آنرا كه به . را ايجاد نماييدweb control libraryيك پروژه ي جديد :كد زير را به آن اضافه كنيدسپس ايجاد شده است پا ك نموده و

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace WebControlLibrary1 { /// <summary> /// Summary description for WebCustomControl1. /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")] public class WebCustomControl1 : System.Web.UI.WebControls.WebControl { /// <summary> /// Render this control to the output parameter specified. /// </summary> /// <param name="output"> The HTML writer to write out to </param> protected override void Render(HtmlTextWriter output) { // Write a title output.Write("<h3>Rendered Control</h3>"); // Opens an Input HTML tag (inserts "<INPUT"). output.WriteBeginTag("INPUT"); // Write some attributes. output.WriteAttribute("value", "Custom Button"); output.WriteAttribute("type", "button"); output.WriteAttribute("onclick", "javascript:alert('Howdy!')");

Page 4: Microsoft Word - advch_05

4

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

// Close the Input HTML tag (inserts ">"). output.WriteEndTag("INPUT"); } } }

جديد را به پـروژه ي Web application سپس همانند مراحلي كه در فصل قبل آموختيم ، يك پروژه ي

، ريفـرنس الزم بـه كنتـرل را ايجـاد كـرده و ، آنرا بعنوان پروژه ي آغازين تنظيم كنيد جاري اضافه نموده :سپس با استفاده از تگ هاي زير آنرا به صفحه وب اضافه نماييد

<%@ Register TagPrefix="Custom" Namespace="WebControlLibrary1" Assembly="WebControlLibrary1" %> <Custom:WebCustomControl1 id="Test1" runat="server" />

.نمونه ي از اجراي برنامه –شكل

Page 5: Microsoft Word - advch_05

5

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

:۲مثال

بـديهي اسـت كـه ايجـاد (د شـد اگر كد فوق را از روش ديگري بخواهيم ارائه دهيم به صورت زير خواهـ :) جديد و غيره همانند قبل است هاي پروژه

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace WebControlLibrary1 { /// <summary> /// Summary description for WebCustomControl1. /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")] public class WebCustomControl1 : System.Web.UI.WebControls.WebControl { protected override void Render(HtmlTextWriter output) { // Write a title output.Write("<h3>Rendered Control</h3>"); // Add some attributes. output.AddAttribute("value", "Custom Button"); output.AddAttribute("type", "button"); output.AddAttribute("onclick", "javascript:alert('Howdy!')"); // Opens an Input HTML tag (inserts "<INPUT"). output.RenderBeginTag("INPUT"); // Close the Input HTML tag (inserts ">"). output.RenderEndTag(); } } }

.در حقيقت اين روش نحوه ي اضافه كردن كدهاي جاوا اسكريپت را به كنترل ما نمايش مي دهد

Page 6: Microsoft Word - advch_05

6

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

:ه سازي تنظيمات خواصذخير

رندر شده ي سفارشي از كنترل هاي موجود ساخته نمي شـوند بنـابراين بايـد بـا هاي از آنجائيكه كنترل . آنها ، خواصشان را بين نمايش متوالي صفحات حفظ كردViewSateاستفاده از

: ۳مثال درون كالس آنرا كه به صـورت خودكـار كد . را ايجاد نماييدweb control library يك پروژه ي جديد

.ايجاد شده است پا ك نموده و سپس كد زير را به آن اضافه كنيدرا نمايش مي دهد كه مقدار خودش را بين نمايش متـوالي صـفحات حفـظ مـي ايي Text كد زير خاصيت

.نمايد

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace WebControlLibrary1 { /// <summary> /// Summary description for WebCustomControl1. /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")] public class WebCustomControl1 : System.Web.UI.WebControls.WebControl { [DefaultValue("")] public string Text { get { // If the property has been set if (ViewState["Text"] != null) // Return the settng. return ViewState["Text"].ToString(); else // Otherwise return "". return null; } set {

Page 7: Microsoft Word - advch_05

7

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

// Store the property setting. ViewState["Text"] = value; } } protected override void Render(HtmlTextWriter output) { // Set the Input control's attributes. output.AddAttribute("value", this.Text); // (2) You must define this attribute to enable PostBack data. output.AddAttribute("name", this.UniqueID); // Create an Input control element using above. output.RenderBeginTag("Input"); // Close the Input control element (inserts />). output.RenderEndTag(); } } }

جديد را به پـروژه ي Web application سپس همانند مراحلي كه در فصل قبل آموختيم ، يك پروژه ي جـاد كـرده و جاري اضافه نموده ، آنرا بعنوان پروژه ي آغازين تنظيم كنيد، ريفـرنس الزم بـه كنتـرل را اي

:سپس با استفاده از تگ هاي زير آنرا به صفحه وب اضافه نماييد

<%@ Register TagPrefix="Custom" Namespace="WebControlLibrary1" Assembly="WebControlLibrary1" %> <Custom:WebCustomControl1 id="Test1" runat="server" />

درون فيلدهاي مخفي بر روي وب فرم ذخيره مي شـوند و كـار خوانـدن ، داده ها ViewStateبا تنظيم

.اطالعات براي بار بعد نيز از اين فيلدهاي مخفي صورت خواهد گرفت ViewState براي نوع هاي داده اي string و ArrayList و HashTable نه سازي شده است اما هر ي به

براي سـاير نـوع هـاي داده . مي توان در آن ذخيره كرد باشد TypeConverterگونه داده اي را كه داراي ViewState مقـادير را در LoadViewState و SaveViewStateايي مي توان با تحريف كردن متـدهاي

.ذخيره و بازيابي كرد

Page 8: Microsoft Word - advch_05

8

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

:عمليات بر روي متن روي صفحه

:مي كنند عموما متون را درون تگ هايي همانند مثال زير محصور HTML المان هاي <b> bold me! </b>

: براي انجام عمليات روي يك متن ، دريافت و تغييرات روي آن به صورت زير عمل مي شود . به تعريف كنترل كالس پايهParseChildrenاضافه كردن خاصيت -۱ در يك كالس كنترل سفارشيINamingContainerپياده سازي اينترفيس -۲ .Controlsدريافت متن بوسيله كلكسيون -۳

:۴مثال

. كنترل سفارشي زير نحوه ي نمايش يك متن را در كنترل سفارشي با رنگ قرمز بيان مي كندكالس چون مراحل ايجاد پروژه و اضافه كردن آن به يك وب فرم بارها در اين فـصل و فـصل پيـشين تكـرار (

)اين مراحل بايد انجام شودمجدد آنها صرفنظر مي شود و بديهي است كه گرديده است از ذكر

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace WebControlLibrary1 { [DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")] [ParseChildren(false)] public class WebCustomControl1 : System.Web.UI.WebControls.WebControl, INamingContainer { // INamingContainer interface makes it possible to get the Controls array. protected override void Render(HtmlTextWriter output) { // Contained text is returned as a Literal control. LiteralControl litText ; // Get the contained text from the Controls collection.

Page 9: Microsoft Word - advch_05

9

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

litText = (LiteralControl)Controls[0]; // Make it red using the <font> element. output.Write("<font color='red'>" + litText.Text + "</font>"); } } }

:در يك وب فرم با استفاده از تگ هاي زير مي توان از كنترل استفاده نمودو

<Custom:WebCustomControl1 id="Test1" runat="server">some red text</Custom:WebCustomControl1>

: ۵مثال

كلكسيون كنترل ها مي توان هرگونه آيتمي را بين تگ هاي آغـازين و پايـاني نيـز دريافـت با استفاده از گـرد آوري كـرده و آنهـا را در panelبراي مثال ، كالس كنترل سفارشي زير ، كنترل ها را در يـك . نمود

.مركز پنل در صفحه نمايش مي دهد و سپس زمينه ي آنها را قرمز مي كند

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace WebControlLibrary1 { [DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")] [ParseChildren(false)] public class WebCustomControl1 : System.Web.UI.WebControls.WebControl, INamingContainer { // INamingContainer interface makes it possible to get the Controls array. protected override void Render(HtmlTextWriter output) { // Add some attributes for the panel. output.AddAttribute("align", "center"); output.AddStyleAttribute("BACKGROUND-COLOR", "red"); // Start a panel output.RenderBeginTag("div");

Page 10: Microsoft Word - advch_05

10

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

// For each contained control. foreach (Control ctrItem in Controls) { // Render the control ctrItem.RenderControl(output); } output.RenderEndTag(); } } }

:واكنش نشان دادن به عمليات كاربر

نحوه ي مواجـه . كنترل هاي رندر شده نياز به مراحل خاصي براي ايجاد و پاسخ دادن به رويدادها دارند :شدن با رويدادها بستگي به نوع آن پيدا مي كند

- Cached events : از درون يك كد سفارشي ايجاد مي شوند. - Post-back events : نت فرستاده مي شـود و بايـد توسـط اسـكريپت هـاي مربوطـه از طرف كالي

.انجام شود

:در ادامه اين موارد را به تفصيل بررسي خواهيم كرد

Raising Cached events : بوسيله ي كدهاي درون وب فرم ها مديريت مي شوند هنگامكيه وب فرم از طـرف chached رخدادهاي

مديريت آنهـا شـامل .Page_Loadي شود و بعد از فراخواني رخداد كاربر به سرور بازگشت داده داده م :دو مرحله مي شود

تعريف يك رخداد -۱ كردن رخداد در جايي درون كد كنترل سفارشيايجاد -۲

Page 11: Microsoft Word - advch_05

11

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

: ۶مثال

را تعريف كرده است بطوريكه هرگاه خاصـيت OnChangeبراي مثال ، كالس كنترل سفارشي زير رخداد Text اين رخداد فراخواني مي گردد آن تغيير كند.

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace WebControlLibrary1 { /// <summary> /// Summary description for WebCustomControl1. /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")] [DefaultEvent("Change")] public class WebCustomControl1 : System.Web.UI.WebControls.WebControl { // Declare event. public event EventHandler Change; [DefaultValue("")] public string Text { get { // If the property has been set if (ViewState["Text"] != null) // Return the settng. return ViewState["Text"].ToString(); else // Otherwise return "". return null; } set { // Store the property setting. ViewState["Text"] = value; // Call event method. OnChange(EventArgs.Empty); } } protected override void Render(HtmlTextWriter output) { // Set the Input control's attributes. output.AddAttribute("value", this.Text);

Page 12: Microsoft Word - advch_05

12

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

// (2) You must define this attribute to enable PostBack data. output.AddAttribute("name", this.UniqueID); // Create an Input control element using above. output.RenderBeginTag("Input"); // Close the Input control element (inserts />). output.RenderEndTag(); } protected virtual void OnChange(EventArgs e) { if (Change != null) // Raise event. Change(this, e); } } }

: در وب فرم استفاده مي شودchangeو از كد زير براي مديريت رخداد

private void Test1_Change(object sender, System.EventArgs e) { Response.Write("Text changed!"); }

Raising Post-back events:

ايـن . سبب مي شود تا وب فرم بـه سـرور بـراي پـردازش آنـي فرسـتاده شـود Post-backيك رخداد از يـك Post-back يـك رخـداد Raisingبـراي . مـديريت كـرد Page_Loadرخدادها را مي توان توسط

:كنترل سفارشي مراحل زير بايد انجام شود در كنترل سفارشي IPostBackEventHandlerپياده سازي اينترفيس -۱ تعريف رخداد -۲ .onclickالينت سايد مانند برا پاسخ دادن به رخدادهاي كHTMLايجاد المان هاي -۳ حاوي اسكريپت تا بتوانند صفحه را به سرور HTMLاضافه كردن ويژگي هاي الزم به المان هاي -۴

.بفرستند

Page 13: Microsoft Word - advch_05

13

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

ــاد -۵ ــد ايجـــ ــداد از متـــ ــه جزئـــــيRaisePostBackEvent رخـــ ــرفيس اســـــت كـــ از اينتـــIPostBackEventHandler.

: ۷مثال

: دهد كد زير اين مراحل را در عمل نشان مي

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace WebControlLibrary1 { /// <summary> /// Summary description for WebCustomControl1. /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")] [DefaultEvent("Click")] public class WebCustomControl1 : System.Web.UI.WebControls.WebControl, IPostBackEventHandler { // (2) Declare postback event public event EventHandler Click; // (3) Render an HTML element that can detect user events. protected override void Render(HtmlTextWriter output) { // Write a title output.Write("<h3>Rendered Control</h3>"); // Add some attributes. output.AddAttribute("value", "Custom Button"); output.AddAttribute("type", "button"); // (4) Add attribute to raise Postback event on client. output.AddAttribute("onclick", "javascript:alert('Howdy!');" + Page.GetPostBackEventReference(this)); // Opens an Input HTML tag (inserts "<INPUT"). output.RenderBeginTag("INPUT"); // Close the Input HTML tag (inserts ">"). output.RenderEndTag(); } // Part of the IPostBackEventHandler interface. // you must create this method. public void RaisePostBackEvent(string eventArgument) {

Page 14: Microsoft Word - advch_05

14

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

// (5) Call the event method to raise event. OnClick(EventArgs.Empty); } protected virtual void OnClick(EventArgs e) { // Raise the event. if (Click != null) Click(this, e); } } }

اسكريپت زير ، مربوط به دكمه OnClickي كليك مي كند ، رخداد هنگاميكه كاربر بر روي كنترل سفارش :را اجرا مي كند

alert('Howdy!'); __doPostBack('winTest','');//generated by Page.GetPostBackEventReference

مربوط به اينترفيس RaisePostBack صفحه را به سرور مي فرستد و توسط متد doPostBack_ متد IPostBackEventHandler مي شودپردازش .

: از كد زير براي مديريت آن استفاده مي شود

private void Test1_Click(object sender, System.EventArgs e) { Response.Write("clicked!"); }

:دريافت داده ها از كاربر

. ي وارد شده از طـرف كـاربر را نگهـداري نمـي كننـد كنترل هاي رندر شده به صورت اتوماتيك داده ها كه يك تكست باكس را ايجاد مـي كنـد ، يـك كنتـرل HTML مربوط به inputبراي مثال اگر توسط المان

Page 15: Microsoft Word - advch_05

15

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

و درون آن چيزي را تايپ كنيد به محض اينكه صفحه به سرور فرستاده مي شود ، ودهسفارشي ايجاد نم :براي دريافت داده ها از كاربر بايد مراحل زير طي شود. شودتمام متن نوشته شده داخل آن پاك مي

.IPostBackDataHandlerپياده سازي اينترفيس -۱ تا منحصربفرد شده و بتوان توسـط آن داده هـا را HTML به المان nameاضافه كردن خاصيت -۲

.دريافت كرد .IPostBackDataHandler مربوط به اينترفيس LoadPostBackDataتحريف كردن متدهاي -۳ واقـــــع شـــــده در اينتـــــرفيس RaisePostDataChangedEventتحريـــــف كـــــردن متـــــد -۴

IPostBackDataHandler.

.)اين گزينه اختياري است( تغيير كرده است data يك رخداد تا مشخص شود كه ايجاد -۵

: ۸مثال

زي كـرد و داده هـاي وارد كنترل سفارشي زير نشان مي دهد كه چگونه مي توان اين مراحل را پياده سا اسـتاندارد inputشده از طرف كاربران را در يك تكست بـاكس رنـدر شـده و ايجـاد شـده توسـط المـان

HTMLنگهداري كرد ، .

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; namespace WebControlLibrary1 { /// <summary> /// Summary description for WebCustomControl1. /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>") , DefaultEvent("Change")] public class WebCustomControl1 : System.Web.UI.WebControls.WebControl, IPostBackDataHandler { // Declare event. public event EventHandler Change; [DefaultValue("")] public string Text

Page 16: Microsoft Word - advch_05

16

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

{ get { // If the property has been set if (ViewState["Text"] != null) // Return the settng. return ViewState["Text"].ToString(); else // Otherwise return "". return null; } set { if ((ViewState["Text"] != null) && (ViewState["Text"].ToString() != value)) { // Store the property setting. ViewState["Text"] = value; // Call event method. OnChange(EventArgs.Empty); } } } protected override void Render(HtmlTextWriter output) { // Set the Input control's attributes. output.AddAttribute("value", this.Text); // (2) You must define this attribute to enable PostBack data. output.AddAttribute("name", this.UniqueID); // Create an Input control element using above. output.RenderBeginTag("Input"); // Close the Input control element (inserts />). output.RenderEndTag(); } // (3) Get data from the user. // You must create this method. public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) { // If the user changes Input value, update the text property. if (((ViewState["Text"] != null) && (ViewState["Text"].ToString() != postCollection[postDataKey])) || ((ViewState["Text"] == null) && (postCollection[postDataKey] != ""))) { ViewState["Text"] = postCollection[postDataKey]; // Returning true invokes RaisePostDataChangedEvent below. return true; } else // Returning False does not invoke RaisePostDataChangedEvent. return false; }

Page 17: Microsoft Word - advch_05

17

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

// (4) Override RaisePostDataChangedEvent method. // You must create this method. public void RaisePostDataChangedEvent() { // (5) Call the event method. This is optional. OnChange(EventArgs.Empty); } protected virtual void OnChange(EventArgs e) { if (Change != null) // Raise event. Change(this, e); } } }

:ToolBoxاضافه كردن كنترل هاي سفارشي به

همانطور كه پيش تر نيز ذكر شد يكي از قابليت هاي انواع كنترل هاي سفارشي ، توانـايي اضـافه كـردن :اي اين منظور به صورت زير عمل مي شودبر. استVS.NET استاندارد ToolBarآنها به

.شكل زير ظاهر مي شود. را انتخاب كنيدCustomize-toolBox گزينه ي Toolsاز منوي -۱

۲- tab مربوط به .Net framework components را انتخاب نماييد و سپس بر روي Browse كليك . را نمايش مي دهدOpen ديالوگ باكس VS.NETسپس . نماييد

كنترل را انتخاب كـرده و در ادامـه خودبخـود بـه ليـست كنتـرل هـا ) Assembly) .dllيل سپس فا -۳ .اضافه مي شود

. كليك نموده و عمليات را تكميل نماييدOkبر روي دكمه ي -۴

بـراي اسـتفاده از آن . استاندارد مراجعه نماييد ، كنترل شما به آن اضافه شده است ToolBox اكنون به بـه صـورت VS.NETنترل هاي وب استفاده مـي شـود و تمـام تـگ هـاي الزم را خـود هم مانند ساير ك

.اتوماتيك اضافه مي كند و نيازي به نوشتن دستي آنها وجود ندارد

Page 18: Microsoft Word - advch_05

18

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

. از طريق ديالوگ باكس فوق انجام مي شودToolBarاضافه كردن يك كنترل سفارشي به –شكل

: اضافه مي شودToolBarفارشي هنگاميكه به و آيكون يك كنترل سTagPrefixتنظيم كردن

:براي اضافه كردن آيكون به كنترل سفارشي مراحل زير طي مي شود آنـرا در . شانزده در شانزده كه حـاوي تـصوير دلخـواهي اسـت را تهيـه نماييـد bitmapيك فايل -۱

. پروژه ي كنترل سفارشي كپي نماييدbinدايركتوري :الس كنترل سفارشي اضافه نماييد خط زير را به ابتداي ك -۲

using System.Drawing;

: را به تعريف كالس كنترل اضافه كنيدToolBoxBitmapويژگي -۳[ParseChildren(False),ToolBoxBitmap("Red")]

Page 19: Microsoft Word - advch_05

19

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

.پروژه را دوباره كامپايل نماييد -۴

ار قـرار دادن كنتـرل روي مناسب براي كنترل كه به صورت خودكار با هر ب TagPrefix براي ايجاد يك : ايجاد شود مراحل زير طي مي شودVS.NETصفحه توسط

اضافه كردن -۱using System.Web.UI;

[assembly:TagPrefix("namespace","prefix")]

كامپايل مجدد -۲

Page 20: Microsoft Word - advch_05

20

شركت پيشگامان فناوري

باشدكليه حقوق اين جزوه آموزشي متعلق به سايت آموزش الكترونيكي پرشيا مي )[email protected] (نصيريوحيد : استاد دوره پيشرفته ASP.NETجزوه آموزشي كالس

تمرين

بوجود آوريد و از آن inputيك كنترل رندر شده ي تكست باكس را با استفاده از المان استاندارد -۱ .در يك صفحه ي الگين براي پست كردن اطالعات به سرور استفاده نماييد

و يــك ToolBoxبــه كنترلــي كــه در ســوال يــك ايجــاد كــرده ايــد يــك تــصوير بــراي نمــايش در -۲TagPrefixمناسب و دلخواه نسبت دهيد .